Транспонировать одномерный массив в Numpy без приведения к матрице - PullRequest
0 голосов
/ 14 ноября 2018

Моя цель - превратить вектор строки в вектор столбца и наоборот. Документация для numpy.ndarray.transpose гласит:

Для 1-D массива это не имеет никакого эффекта. (Для переключения между столбцами и векторами строк сначала приведите одномерный массив в матричный объект.)

Однако, когда я пытаюсь это сделать:

my_array = np.array([1,2,3])
my_array_T = np.transpose(np.matrix(myArray))

Я получаю желаемый результат, хотя и в матричной форме (matrix([[66],[640],[44]])), но я также получаю это предупреждение:

PendingDeprecationWarning : подкласс матрицы не является рекомендуемым способом представления матриц или работы с линейной алгеброй (см. https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html).. Настройте код для использования обычного ndarray.

my_array_T = np.transpose(np.matrix(my_array))

Как я могу правильно транспонировать ndarray тогда?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

1D-массив сам по себе один раз транспонируется, в отличие от Matlab, где 1D-массив не существует и, по крайней мере, 2D.

Вам нужно изменить его форму:

my_array.reshape(-1, 1)

Или:

my_array.reshape(1, -1)

В зависимости от того, какой тип вектора вы хотите (вектор столбца или строки).

-1 является вещательным, с использованием всех возможных элементов, и1 создает второе необходимое измерение.

0 голосов
/ 14 ноября 2018

Если ваш массив my_array и вы хотите преобразовать его в вектор-столбец, вы можете сделать:

my_array.reshape(-1, 1)

Для вектора-строки вы можете использовать

my_array.reshape(1, -1)

Обаиз них также могут быть транспонированы, и это будет работать как ожидалось.

0 голосов
/ 14 ноября 2018

IIUC, используйте reshape

my_array.reshape(my_array.size, -1)
...