Básicamente, lo que hace la función de transposición es intercambiar la forma y los pasos de la 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)
En el caso de una matriz nudosa 1D (matriz de rango 1), la forma y las zancadas son tuplas de 1 elemento y no se pueden intercambiar, y la transposición de dicha matriz 1D la devuelve sin cambios. En su lugar, puede transponer un "vector fila" (matriz numpy de forma (1, n)) en un "vector columna" (matriz numpy de forma (n, 1)). Para lograr esto, primero debe convertir su matriz numpy 1D en un vector de fila y luego intercambiar la forma y las zancadas (transponerlo). A continuación se muestra una función que lo hace:
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])
Ejemplo:
>>> 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]])
Por supuesto, no tiene que hacerlo de esta manera, ya que tiene una matriz 1D y puede cambiarla directamente a (n, 1)matriz por a.reshape((-1, 1))o a[:, None]. Solo quería demostrar cómo funciona la transposición de una matriz.