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.