Uso Python y NumPy y tengo algunos problemas con la "transposición":
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
Invocar a.Tno es transponer la matriz. Si aes, por ejemplo [[],[]], se transpone correctamente, pero necesito la transposición de [...,...,...].

Respuestas:
Funciona exactamente como se supone que debe hacerlo. ¡La transposición de una matriz 1D sigue siendo una matriz 1D ! (Si está acostumbrado a matlab, fundamentalmente no tiene un concepto de matriz 1D. Las matrices "1D" de Matlab son 2D).
Si desea convertir su vector 1D en una matriz 2D y luego transponerlo, simplemente córtelo
np.newaxis(oNone, son lo mismo,newaxises más legible).Sin embargo, en términos generales, nunca debe preocuparse por esto. Agregar la dimensión adicional generalmente no es lo que quieres, si solo lo haces por costumbre. Numpy transmitirá automáticamente una matriz 1D al hacer varios cálculos. Por lo general, no es necesario distinguir entre un vector de fila y un vector de columna (ninguno de los cuales son vectores . ¡Ambos son 2D!) Cuando solo quieres un vector.
fuente
np.arangehacer rápidamente una matriz 1D. Funciona exactamente igual paraa = np.array([5,4]).()no indican una dimensión adicional en numpy. Sia = np.arange(10)entoncesaesarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])como producido pora.__repr__(). Este es una.ndim --> 1vector unidimensional (es decir ) como lo indican los corchetes[]. Elarray( ... )no se ve cuando se hace bienprint(a)oa.__str__().np.vstack()operación sea más explícito:print np.vstack(a).Use dos pares de paréntesis en lugar de uno. Esto crea una matriz 2D, que puede transponerse, a diferencia de la matriz 1D que crea si usa un par de paréntesis.
Ejemplo más completo:
Use el
shapemétodo de numpy para ver lo que está sucediendo aquí:fuente
Para matrices 1D :
Una vez que comprenda que -1 aquí significa "tantas filas como sea necesario", creo que esta es la forma más legible de "transponer" una matriz. Si su matriz es de mayor dimensionalidad, simplemente use
a.T.fuente
transposey lareshapematriz modificada de diferentes maneras (la forma de la imagen resultante es la misma, pero los elementos se colocan de manera diferente).Puede convertir un vector existente en una matriz envolviéndolo en un conjunto adicional de corchetes ...
numpy también tiene una
matrixclase (ver matriz vs. matriz ) ...fuente
matriz 1D numpy -> matriz de columna / fila:
Y como dijo @ Joe-kington, se puede reemplazar
Noneconnp.newaxispara facilitar la lectura.fuente
Para 'transponer' una matriz 1d a una columna 2d, puede usar
numpy.vstack:También funciona para listas de vainilla:
fuente
vstack?np.concatenate([atleast_2d(_m) for _m in tup], 0). ¡Divide la matriz en (1,1) matrices y concatena esas! En el proceso, hace una copia, mientras que todos los reformados hacen una vista.Solo puede transponer una matriz 2D. Puede usar
numpy.matrixpara crear una matriz 2D. Esto lleva tres años de retraso, pero solo estoy agregando al posible conjunto de soluciones:fuente
np.matrixno es necesario y generalmente se desaconseja.en su lugar, use
arr[:,None]para crear un vector de columnafuente
La transposición de
es
bueno el código es:
Este es un enlace para más información:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
fuente
Otra solución.... :-)
fuente
Solo estoy consolidando la publicación anterior, espero que ayude a otros a ahorrar algo de tiempo:
La matriz a continuación tiene
(2, )dimensión, es una matriz 1-D,Hay dos formas de transponer una matriz 1-D:
córtelo con "np.newaxis" o ninguno.
otra forma de escribir, lo anterior sin
Toperación.Ajustar [] o usar np.matrix, significa agregar una nueva dimensión.!
fuente
Como algunos de los comentarios mencionados anteriormente, la transposición de las matrices 1D son matrices 1D, por lo que una forma de transponer una matriz 1D sería convertir la matriz en una matriz de la siguiente manera:
fuente
El nombre de la función en
numpyes column_stack .fuente
Hay un método no descrito en las respuestas pero descrito en la documentación del
numpy.ndarray.transposemétodo:Uno puede hacer:
Que (imo) es mejor que usar
newaxis.fuente
Básicamente, lo que hace la función de transposición es intercambiar la forma y los pasos de la matriz:
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:Ejemplo:
Por supuesto, no tiene que hacerlo de esta manera, ya que tiene una matriz 1D y puede cambiarla directamente a
(n, 1)matriz pora.reshape((-1, 1))oa[:, None]. Solo quería demostrar cómo funciona la transposición de una matriz.fuente
La forma en que he aprendido a implementar esto de una manera compacta y legible para matrices 1-D, hasta ahora:
numpy.r_ y numpy.c_ traducen objetos de corte a concatenación a lo largo del primer y segundo eje, respectivamente. Por lo tanto, la división v2 [:, 0] en la transposición de la matriz vertical v2 en la matriz horizontal h2
numpy.vstack es equivalente a la concatenación a lo largo del primer eje después de que las matrices 1-D de forma (N,) se hayan reformado a (1, N). Reconstruye matrices divididas por vsplit .
fuente