Quand j'essaie d'obtenir juste le premier élément d'un tableau comme celui-ci
import numpy
a = numpy.array([1,2])
a[:,0]
Je reçois cette erreur
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-3-ed371621c46c> in <module>()
----> 1 a[:,0]
IndexError: too many indices
J'aimerais trouver un moyen de le faire tout en utilisant le découpage en tranches car le code complet s'ouvre et lit de nombreux fichiers différents à l'aide de numpy.loadtxt()
, qui ont tous deux colonnes qui varient de 1 à quelques N.
Votre tableau a = numpy.array([1,2])
n'a que one dimension: sa forme est (2,)
. Cependant, votre tranche a[:,0]
spécifie les sélections pour deux dimensions. Cela provoque NumPy pour générer l'erreur.
Pour obtenir le premier élément de a
, il vous suffit d'écrire a[0]
(une sélection pour une seule dimension est effectuée ici).
En regardant votre autre question , si vous voulez vous assurer que la syntaxe a[:,0]
fonctionne toujours, vous pouvez vous assurer que a
a toujours deux dimensions. Lorsque vous chargez un tableau avec np.loadtxt
, utilisez le paramètre ndmin
, par exemple:
np.loadtxt(F, skiprows=0, ndmin=2)
Comme mentionné ci-dessus, vous avez un tableau à une dimension et vous essayez de le découper en deux dimensions.
Une chose à ajouter, et que j'ai trouvé très utile dans le passé, est que numpy vous permet de convertir facilement un tableau 1D en un tableau 2D (sous forme de ligne ou de colonne):
>>> a = np.array([0,1,2])
>>> a.shape
(3,)
>>> a_row = a[None,:]
>>> a_row.shape
(1,3)
>>> a_col = a[:,None]
>>> a_col.shape
(3,1)
J'ai également eu du mal à résoudre ce problème lors de l'analyse de nombreux fichiers d'entrée pouvant contenir de 1 à 1 000 lignes. Cependant, j'utilise numpy genfromtxt qui ne vous permet pas de définir 'ndmin', donc la solution que j'ai proposée consiste à définir manuellement la forme du tableau sur 1 pour les tableaux à 1 ligne:
>>> arr=np.genfromtxt('file',names=['a','b'],dtype='f4,f4')
>>> if (np.size(arr) == 1): arr.shape=1
Le tableau à 1 ligne se comporte désormais comme un tableau à 1 dimension pouvant être indexé:
>>> for i in range(np.size(arr)): print arr['a'][i]