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!
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.
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
A, = np.array(M.T)
dépend de ce que vous entendez par élégance je suppose mais c'est ce que je ferais
Vous pouvez essayer la variante suivante:
result=np.array(M).flatten()
np.array(M).ravel()
Si vous aimez la vitesse Mais si vous aimez la mémoire:
np.asarray(M).ravel()
Ou vous pouvez essayer d'éviter certains temps avec
A = M.view(np.ndarray)
A.shape = -1
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,:]
.
Cela va convertir la matrice en tableau
A = np.ravel(M).T
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