Disons que j'ai un tableau a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Je voudrais le convertir en un tableau 1D (c'est-à-dire un vecteur de colonne):
b = np.reshape(a, (1,np.product(a.shape)))
mais cela revient
array([[1, 2, 3, 4, 5, 6]])
ce qui n'est pas la même chose que:
array([1, 2, 3, 4, 5, 6])
Je peux prendre le premier élément de ce tableau pour le convertir manuellement en un tableau 1D:
b = np.reshape(a, (1,np.product(a.shape)))[0]
mais cela me demande de connaître le nombre de dimensions du tableau d'origine (et de concaténer [0] lorsque vous travaillez avec des dimensions plus élevées)
Existe-t-il un moyen indépendant des dimensions d'obtenir un vecteur colonne / ligne à partir d'un ndarray arbitraire?
ravel()
renvoie une vue, mais ce n'est pas toujours vrai. Il y a des cas oùravel()
renvoie une copie. </pedantic>a.ravel()
semble être environ trois fois plus rapide quea.reshape(-1)
.a.flatten()
est beaucoup plus lent, car il doit faire une copie.ou simplement:
la source
b = a.reshape(-1)
pour faire court dans le premier exemple.L'un des moyens les plus simples consiste à utiliser
flatten()
, comme cet exemple:Mon tableau était comme ceci:
Après utilisation
flatten()
:C'est aussi la solution des erreurs de ce type:
la source
Pour la liste des tableaux de tailles différentes, utilisez les éléments suivants:
Production:
[1 2 3 4 5 6 7 8]
la source
a
dosb
?Je voulais voir un résultat de référence des fonctions mentionnées dans les réponses, y compris celles d'unutbu .
Je tiens également à souligner que numpy doc recommande d'utiliser
arr.reshape(-1)
au cas où la vue est préférable. (même siravel
c'est un peu plus rapide dans le résultat suivant)Référence
Les fonctions:
np.ravel
: renvoie la vue, si possiblenp.reshape(-1)
: renvoie la vue, si possiblenp.flatten
: retourne une copienp.flat
: retournenumpy.flatiter
. semblable àiterable
version numpy: '1.18.0'
Temps d'exécution sur différentes
ndarray
taillesConclusion
Code utilisé
la source
Bien que cela n'utilise pas le format de tableau np, (paresseux pour modifier mon code) cela devrait faire ce que vous voulez ... Si vous voulez vraiment un vecteur de colonne, vous voudrez transposer le résultat du vecteur. Tout dépend de la manière dont vous envisagez de l'utiliser.
Donc, si vous avez besoin de transposer, vous pouvez faire quelque chose comme ceci:
la source