Написание функций, которые принимают как одномерные, так и двумерные массивы?

Насколько я понимаю, одномерные массивы в numpy можно интерпретировать как вектор, ориентированный на столбцы, или вектор, ориентированный на строки. Например, 1-D массив с формой(8,) можно рассматривать как двумерный массив формы(1,8) или форма(8,1) в зависимости от контекста.

У меня проблема в том, что функции, которые я пишу для манипулирования массивами, имеют тенденцию хорошо обобщать в двумерном случае для обработки как векторов, так и матриц, но не очень хорошо в одномерном случае.

Таким образом, мои функции в конечном итоге делают что-то вроде этого:

if arr.ndim == 1:
    # Do it this way
else:
    # Do it that way

Или даже это:

# Reshape the 1-D array to a 2-D array
if arr.ndim == 1:
    arr = arr.reshape((1, arr.shape[0]))

# ... Do it the 2-D way ...

То есть я могу обобщить код для обработки двумерных случаев(r,1), (1,c), (r,c), но не одномерные случаи без разветвления или изменения формы.

Это становится еще хуже, когда функция работает с несколькими массивами, как я проверял и преобразовывал каждый аргумент.

Итак, мой вопрос: я пропускаю лучшую идиому? Является ли шаблон, который я описал выше, общим для кода numpy?

Кроме того, что касается смежных принципов разработки API, если вызывающая сторона передает одномерный массив в какую-либо функцию, которая возвращает новый массив, а возвращаемое значение также является вектором, является ли обычной практикой изменение формы двумерного вектора(r,1) или же(1,c) вернуться к 1-D массиву или просто документально подтвердить, что функция возвращает 2-D массив независимо?

Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос