2010-07-26 32 views
104

Estoy usando numpy. Tengo una matriz con 1 columna y N filas y quiero obtener una matriz con N elementos.Numpy matrix to array

Por ejemplo, si tengo M = matrix([[1], [2], [3], [4]]), quiero obtener A = array([1,2,3,4]).

Para lograrlo, uso A = np.array(M.T)[0]. ¿Alguien sabe una forma más elegante de obtener el mismo resultado?

Gracias!

+0

Ivnerse pregunta: [convertir una matriz numpy 2D a matriz 2D numpy] (http://stackoverflow.com/questions/17443620/convert-a-2d -numpy-array-a-a-2d-numpy-matrix) –

Respuesta

125

Si desea algo un poco más legible, se puede hacer esto:

A = np.squeeze(np.asarray(M)) 

De manera equivalente, también se puede hacer: A = np.asarray(M).reshape(-1), pero eso es un poco más difícil de leer.

+4

Pequeña queja de mi parte ... ¿por qué Numpy tiene matrices y matrices como entidades separadas. Es muy poco entusiasta en mi humilde opinión. Gracias por este consejo @Joe. – Naijaba

+5

@Naijaba - Por lo que vale la pena, la clase de la matriz se deprecia de manera efectiva (pero no formal). Está allí principalmente con fines históricos. Eliminar 'numpy.matrix' es un tema un poco polémico, pero los desarrolladores numpy coinciden mucho en que tener ambos es antiponético y molesto por muchas razones. Sin embargo, la cantidad de código viejo, sin mantener "en la naturaleza" que usa 'matriz' hace que sea difícil eliminarlo por completo. –

+1

Sin mencionar, la verdadera multiplicación de matrices solo se agregó para las matrices en Numpy 1.10, y básicamente aún está en beta. Esto significa que mucha gente (incluyéndome a mí) todavía tiene que usar matrices en lugar de matrices para hacer lo que queremos hacer. https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html –

5

O usted podría tratar de evitar algunos temps con

A = M.view(np.ndarray) 
A.shape = -1 
10
A, = np.array(M.T) 

depende de lo que quiere decir con elegancia, pero supongo que eso es lo que yo haría

4

Usted puede probar la siguiente variante:

result=np.array(M).flatten() 
5
np.array(M).ravel() 

Si usted cuida de velocidad; Pero si usted se preocupa por la memoria:

np.asarray(M).ravel() 
1

En primer lugar, Mv = numpy.asarray(M.T), lo que le da un 4x1, pero matriz 2D.

A continuación, realice A = Mv[0,:], que le proporciona lo que desea. Podrías juntarlos, como numpy.asarray(M.T)[0,:].

0

Esto convertirá la matriz en una matriz

A = np.ravel(M).T