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.T
no es transponer la matriz. Si a
es, 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,newaxis
es 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.arange
hacer 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)
entoncesa
esarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
como producido pora.__repr__()
. Este es una.ndim --> 1
vector 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
shape
mé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
transpose
y lareshape
matriz 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
matrix
clase (ver matriz vs. matriz ) ...fuente
matriz 1D numpy -> matriz de columna / fila:
Y como dijo @ Joe-kington, se puede reemplazar
None
connp.newaxis
para 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.matrix
para crear una matriz 2D. Esto lleva tres años de retraso, pero solo estoy agregando al posible conjunto de soluciones:fuente
np.matrix
no 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
T
operació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
numpy
es column_stack .fuente
Hay un método no descrito en las respuestas pero descrito en la documentación del
numpy.ndarray.transpose
mé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