Basicamente, o que a função de transposição faz é trocar a forma e os passos da matriz:
>>> 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)
No caso de um array numpy 1D (array 1), a forma e os passos são tuplas de 1 elemento e não podem ser trocados, e a transposição de um array 1D retorna-o inalterado. Em vez disso, você pode transpor um "vetor de linha" (matriz numpy de forma (1, n)) para um "vetor de coluna" (matriz numpy de forma (n, 1)). Para conseguir isso, você deve primeiro converter sua matriz numpy 1D em vetor de linha e depois trocar a forma e as passadas (transpor). Abaixo está uma função que faz isso:
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])
Exemplo:
>>> 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]])
É claro que você não precisa fazer isso dessa maneira, já que possui uma matriz 1D e pode remodelá-la diretamente na (n, 1)matriz por a.reshape((-1, 1))ou a[:, None]. Eu só queria demonstrar como a transposição de uma matriz funciona.