В основному, те, що функція транспозиції робить, - поміняти форму та кроки масиву:
>>> 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 масивного масиву (масив ran-1) форма і кроки є одноелементними кортежами і їх не можна міняти, а транспонування такого 1D масиву повертає його незмінним. Натомість можна перенести "рядок-вектор" (numpy масив фігури (1, n)
) у "колонку-вектор" (numpy масив фігури (n, 1)
). Для цього вам потрібно спершу перетворити свій 1D масив нумерів у векторний рядок, а потім поміняти форму та кроки (перекласти його). Нижче наведена функція, яка виконує це:
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]])
Звичайно, вам не потрібно робити це так, оскільки у вас є 1D масив, і ви можете безпосередньо переробити його в (n, 1)
масив за допомогою a.reshape((-1, 1))
або a[:, None]
. Я просто хотів продемонструвати, як працює транспозиція масиву.