200 votes

Matrice Numpy vers tableau

J'utilise numpy. J'ai une matrice avec 1 colonne et N lignes et je veux obtenir un tableau de N éléments.

Par exemple, si j'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 !

0 votes

243voto

Joe Kington Points 68089

Si vous voulez quelque chose d'un peu plus lisible, vous pouvez faire ceci :

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

De manière équivalente, vous pourriez aussi faire : A = np.asarray(M).reshape(-1) mais c'est un peu moins facile à lire.

19 votes

Un petit coup de gueule de ma part... pourquoi numpy a des tableaux et des matrices comme des entités séparées. C'est tellement anti-python IMHO. Merci pour cette astuce @Joe.

11 votes

@Naijaba - Pour ce que ça vaut, la classe matrice est effectivement (mais pas formellement) dépréciée. Elle est là principalement à des fins historiques. Suppression de numpy.matrix est une question quelque peu controversée, mais les développeurs de numpy sont tout à fait d'accord avec vous pour dire que le fait d'avoir les deux est impythique et ennuyeux pour toute une série de raisons. Cependant, la quantité de vieux code non maintenu "dans la nature" qui utilise matrix rend difficile son retrait complet.

1 votes

Sans compter que la véritable multiplication matricielle n'a été ajoutée pour les tableaux que dans la version 1.10 de Numpy, et qu'elle est toujours en version bêta. Cela signifie que beaucoup de gens (moi y compris) doivent encore utiliser des matrices au lieu de tableaux pour faire ce que nous voulons faire. docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html

151voto

hpaulj Points 6132

8 votes

Je pense que cette réponse est meilleure que la réponse acceptée, en termes de performances et de simplicité.

0 votes

M.A1 est génial, même implémentation que "ravel" et "flatten" et dans ce cas ne provoque aucune copie de données A reste donc lié à M ce qui peut causer des surprises si A et/ou M sont mutables. M.flat véritable alternative renvoyant le générateur "flatiter" (sémantique en lecture seule) np.squeeze(M) # donne une vue supprimant les dimensions de taille 1, ok ici aussi mais pas garanti d'être 1-d pour M général np.reshape(M,-1) # est habituellement une vue dépendant de la compatibilité de forme, ce "-1" est un moyen détourné de faire A1/ravel/flatten

14voto

bubble Points 61

Vous pouvez essayer la variante suivante :

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

13voto

mvu Points 61
A, = np.array(M.T)

Cela dépend de ce que vous entendez par élégance, je suppose, mais c'est ce que je ferais.

7voto

Pierre GM Points 7792

Ou vous pouvez essayer d'éviter certains temps avec

A = M.view(np.ndarray)
A.shape = -1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X