По сути, функция транспонирования меняет местами форму и шаги массива:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
В случае массива 1D numpy (массив ранга 1) форма и шаги являются кортежами из 1 элемента и не могут быть заменены местами, а транспонирование такого массива 1D возвращает его без изменений. Вместо этого вы можете транспонировать «вектор-строку» (массив из множества фигур (1, n)
) в «вектор-столбец» (массив из множества фигур в форме (n, 1)
). Для этого вам нужно сначала преобразовать массив 1D numpy в вектор-строку, а затем поменять местами форму и шаги (транспонировать). Ниже приведена функция, которая это делает:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
Пример:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
Конечно, вам не обязательно делать это таким образом, поскольку у вас есть одномерный массив, и вы можете напрямую преобразовать его в массив (n, 1)
с помощью a.reshape((-1, 1))
или a[:, None]
. Я просто хотел продемонстрировать, как работает транспонирование массива.
person
Andreas K.
schedule
06.01.2020