Zasadniczo funkcja transpozycji polega na zamianie kształtu i kroków tablicy:
>>> 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)
W przypadku tablicy numpy 1D (tablica rangi 1) kształt i kroki są krotkami 1-elementowymi i nie można ich zamienić, a transpozycja takiej tablicy 1D zwraca ją bez zmian. Zamiast tego możesz przetransponować „wektor wiersza” (tablica numeryczna kształtu (1, n)) na „wektor kolumnowy” (tablica numeryczna kształtu (n, 1)). Aby to osiągnąć, musisz najpierw przekonwertować tablicę numpy 1D na wektor wiersza, a następnie zamienić kształt i kroki (przetransponować). Poniżej znajduje się funkcja, która to robi:
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])
Przykład:
>>> 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]])
Oczywiście nie musisz tego robić w ten sposób, ponieważ masz tablicę 1D i możesz bezpośrednio przekształcić ją w (n, 1)tablicę za pomocą a.reshape((-1, 1))lub a[:, None]. Chciałem tylko pokazać, jak działa transpozycja macierzy.