web-dev-qa-db-fra.com

Matrice Numpy à la matrice

J'utilise numpy. J'ai une matrice avec 1 colonne et N lignes et je veux obtenir un tableau avec 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]. Est-ce que quelqu'un connaît un moyen plus élégant d'obtenir le même résultat?

Merci!

122
yassin

Si vous souhaitez quelque chose d'un peu plus lisible, vous pouvez le faire:

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.

165
Joe Kington
105
hpaulj
A, = np.array(M.T)

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

13
mvu

Vous pouvez essayer la variante suivante:

result=np.array(M).flatten()
8
bubble
np.array(M).ravel()

Si vous aimez la vitesse Mais si vous aimez la mémoire:

np.asarray(M).ravel()
6
Kevad

Ou vous pouvez essayer d'éviter certains temps avec

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

D'abord, Mv = numpy.asarray(M.T), qui vous donne un tableau 4x1 mais 2D.

Ensuite, effectuez A = Mv[0,:], qui vous donne ce que vous voulez. Vous pouvez les assembler, en tant que numpy.asarray(M.T)[0,:].

2
oracleyue

Cela va convertir la matrice en tableau 

A = np.ravel(M).T
2
Siraj S.

ravel () et flatten () fonctions de numpy sont deux techniques que je voudrais essayer ici. Je voudrais ajouter aux messages de Joe , Siraj , bubble et Kevad .

Ravel:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

Aplatir:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel() est plus rapide, puisqu'il s'agit d'une fonction au niveau de la bibliothèque qui ne crée aucune copie du tableau. Cependant, tout changement dans le tableau A sera reporté sur le tableau d'origine M si vous utilisez numpy.ravel().

numpy.flatten() EST PLUS LENT QUE numpy.ravel(). Mais si vous utilisez numpy.flatten() pour créer A, alors modifications dans A ne seront pas reportées dans le tableau d'origine M.

numpy.squeeze() et M.reshape(-1) sont plus lents que numpy.flatten() et numpy.ravel().

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop

%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop

%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop

%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop
0
Siddharth Satpathy