J'utilise numpy. J'ai une matrice avec 1 colonne et N lignes et je veux obtenir un tableau à partir de N éléments.
Par exemple, si je l'ai M = matrix([[1], [2], [3], [4]])
, je veux obtenir A = array([1,2,3,4])
.
Pour y parvenir, j'utilise A = np.array(M.T)[0]
. Quelqu'un connaît-il un moyen plus élégant d'obtenir le même résultat?
Merci!
Réponses:
Si vous souhaitez quelque chose d'un peu plus lisible, vous pouvez le faire:
De manière équivalente, vous pouvez également faire:,
A = np.asarray(M).reshape(-1)
mais c'est un peu moins facile à lire.la source
numpy.matrix
est un peu une question litigieuse, mais les développeurs numpy sont tout à fait d'accord avec vous pour dire qu'avoir les deux est impythonique et ennuyeux pour toute une série de raisons. Cependant, la quantité de code ancien et non maintenu "dans la nature" qui utilisematrix
rend difficile sa suppression complète.sklearn
). En fait, il existe différentssparse matrix
types dansscipy
, qui permettent un accès efficace via des lignes ou des colonnes. J'imagine que cela peut être un problème pour fusionner les concepts de matrice et de tableau. Cela dit, je me demande si unsparse array
type pourrait également être introduit et s'il est prévu de le faire. Des indices?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
la source
dépend de ce que vous entendez par élégance je suppose mais c'est ce que je ferais
la source
Vous pouvez essayer la variante suivante:
la source
Si vous aimez la vitesse; Mais si vous vous souciez de la mémoire:
la source
Ou vous pouvez essayer d'éviter certains temps avec
la source
Première,
Mv = numpy.asarray(M.T)
ce qui vous donne un tableau 4x1 mais 2D.Ensuite, jouez
A = Mv[0,:]
, ce qui vous donne ce que vous voulez. Vous pouvez les mettre ensemble, commenumpy.asarray(M.T)[0,:]
.la source
Cela convertira la matrice en tableau
la source
ravel () et aplatir () fonctions de numpy sont deux techniques que je voudrais essayer ici. Je voudrais ajouter aux messages de Joe , Siraj , Bubble et Kevad .
Effilochage:
Aplatir:
numpy.ravel()
est plus rapide , car il s'agit d'une fonction de niveau bibliothèque qui ne fait aucune copie du tableau. Cependant, tout changement dans le tableau A sera reporté sur le tableau d'origine M si vous utiliseznumpy.ravel()
.numpy.flatten()
est plus lent quenumpy.ravel()
. Mais si vous utiliseznumpy.flatten()
pour créer A, des changements dans A ne sera pas reporté sur le M tableau original .numpy.squeeze()
etM.reshape(-1)
sont plus lents quenumpy.flatten()
etnumpy.ravel()
.la source