Estoy usando numpy. Tengo una matriz con 1 columna y N filas y quiero obtener una matriz con N elementos.
Por ejemplo, si tengo M = matrix([[1], [2], [3], [4]])
, quiero obtener A = array([1,2,3,4])
.
Para lograrlo, lo uso A = np.array(M.T)[0]
. ¿Alguien sabe una forma más elegante de obtener el mismo resultado?
¡Gracias!
Respuestas:
Si desea algo un poco más legible, puede hacer esto:
De manera equivalente, también podría hacer:
A = np.asarray(M).reshape(-1)
pero eso es un poco menos fácil de leer.fuente
numpy.matrix
es un tema un tanto polémico, pero los desarrolladores entusiastas están muy de acuerdo con usted en que tener ambas cosas es poco propicio y molesto por muchas razones. Sin embargo, la cantidad de código antiguo y sin mantenimiento "en la naturaleza" que utilizamatrix
hace que sea difícil eliminarlo por completo.sklearn
). De hecho, hay diferentessparse matrix
tiposscipy
, que permiten un acceso eficiente a través de filas o columnas. Me imagino que esto puede ser un problema para fusionar los conceptos de matriz y matriz. Dicho esto, me pregunto si también podría introducirse unsparse array
tipo y si hay algún plan para hacerlo. ¿Alguna pista?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
fuente
depende de lo que quieras decir con elegancia, supongo, pero eso es lo que haría
fuente
Puedes probar la siguiente variante:
fuente
Si te importa la velocidad; Pero si te importa la memoria:
fuente
O podrías tratar de evitar algunas temperaturas con
fuente
Primero,
Mv = numpy.asarray(M.T)
que te da una matriz 4x1 pero 2D.Luego, realiza
A = Mv[0,:]
, lo que te da lo que quieres. Podrías ponerlos juntos, comonumpy.asarray(M.T)[0,:]
.fuente
Esto convertirá la matriz en matriz
fuente
Las funciones ravel () y flatten () de numpy son dos técnicas que probaría aquí. Me gustaría agregar a las publicaciones hechas por Joe , Siraj , bubble y Kevad .
Enmarañar:
Aplanar:
numpy.ravel()
es más rápido , ya que es una función de nivel de biblioteca que no realiza ninguna copia de la matriz. Sin embargo, cualquier cambio en la matriz A se transferirá a la matriz original M si está utilizandonumpy.ravel()
.numpy.flatten()
es más lento quenumpy.ravel()
. Pero si usted está utilizandonumpy.flatten()
para crear A, entonces los cambios en A no dejarse llevar a la matriz original M .numpy.squeeze()
yM.reshape(-1)
son más lentos quenumpy.flatten()
ynumpy.ravel()
.fuente