IndexError: trop d'indices pour le tableau
Je sais qu'il ya une tonne de ces fils, mais ils sont tous pour des cas très simples comme des matrices 3x3 et les choses de ce genre et les solutions ne même pas commencer à s'appliquer à ma situation. Donc, je suis en train de graphe G contre l1 (ce n'est pas onze, mais la L1). Les données sont dans le fichier que j'ai chargé à partir d'un fichier excel. Le fichier excel est 14x250 il y a donc 14 arguments, chacun avec 250 points de données. J'ai eu un autre utilisateur (shout out à Hugh Bothwell!) m'aider avec une erreur dans mon code, mais maintenant une autre erreur est apparu.
Voici donc le code en question:
# format for CSV file:
header = ['l1', 'l2', 'l3', 'l4', 'l5', 'EI',
'S', 'P_right', 'P1_0', 'P3_0',
'w_left', 'w_right', 'G_left', 'G_right']
def loadfile(filename, skip=None, *args):
skip = set(skip or [])
with open(filename, *args) as f:
cr = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
return np.array(row for i,row in enumerate(cr) if i not in skip)
#plot data
outputs_l1 = [loadfile('C:\\Users\\Chris\\Desktop\\Work\\Python Stuff\\BPCROOM - Shingles analysis\\ERR analysis\\l_1 analysis//BS(1) ERR analysis - l_1 - P_3 = {}.csv'.format(p)) for p in p3_arr]
col = {name:i for i,name in enumerate(header)}
fig = plt.figure()
for data,color in zip(outputs_l1, colors):
xs = data[:, col["l1" ]]
gl = data[:, col["G_left" ]] * 1000.0 # column 12
gr = data[:, col["G_right"]] * 1000.0 # column 13
plt.plot(xs, gl, color + "-", gr, color + "--")
for output, col in zip(outputs_l1, colors):
plt.plot(output[:,0], output[:,11]*1E3, col+'--')
plt.ticklabel_format(axis='both', style='plain', scilimits=(-1,1))
plt.xlabel('$l1 (m)$')
plt.ylabel('G $(J /m^2) * 10^{ -3}$')
plt.xlim(xmin=.2)
plt.ylim(ymax=2, ymin=0)
plt.subplots_adjust(top=0.8, bottom=0.15, right=0.7)
Après l'exécution de l'ensemble du programme, j'obtiens le message d'erreur:
Traceback (most recent call last):
File "C:/Users/Chris/Desktop/Work/Python Stuff/New Stuff from Brenday 8 26 2014/CD_ssa_plot(2).py", line 115, in <module>
xs = data[:, col["l1" ]]
IndexError: too many indices for array
et avant que j'ai rencontré ce problème, j'ai eu un autre impliquant la ligne un peu en dessous de celle que le message d'erreur ci-dessus se réfère à:
Traceback (most recent call last): File "FILE", line 119, in <module>
gl = data[:, col["G_left" ]] * 1000.0 # column 12
IndexError: index 12 is out of bounds for axis 1 with size 12
Je comprends la première erreur, mais je suis tout simplement à avoir des problèmes de fixation. La deuxième erreur est source de confusion pour moi. Mon patron est vraiment respirer en bas de mon cou, de sorte que toute aide serait GRANDEMENT appréciée!
- les tableaux sont en partant de zéro, il n'y a pas d'index 12 de 12 élément de tableau
- Avez-vous essayé de mettre
print data
aprèsfor data,color in zip(outputs_l1, colors):
pour voir ce que chaque ligne de données ressemble? Il me semble qu'il ne peut pas être formaté de la façon que vous attendez qu'il soit (votre conviction est qu'il va être un tableau de 14 éléments, non? regarde comme il y a des cas où il y a seulement 12 éléments) - quand je le "type de données d'impression" ou "impression outputs_l1' il est dit que ceux qui sont syntaxe non valide. et il y a 14 arguments afin que les deux derniers vont être n ° 12 et n ° 13, qui est ce que j'appelle pour le graphique. Et où voyez-vous des cas où il y a seulement 12? C'était mon problème avant et je pensais que je l'ai corrigé, mais j'ai peut-être raté quelque chose
- êtes-vous à l'aide de Python 3.x? auquel cas il devrait être
print(data)
à la place.IndexError: index 12 is out of bounds for axis 1 with size 12
est explicite qu'il y a une ligne de données qui ne contient que 12 éléments quelque part.
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est donnée dans le message d'erreur, même si elle n'est pas très facile à repérer:
Un trop grand nombre d'indices " signifie que vous avez donné trop d'indices. Vous avez donné 2 valeurs comme vous vous attendez à des données d'un tableau 2D. Numpy est de se plaindre car
data
n'est pas en 2D (il est soit en 1D ou Aucun).C'est un peu une supposition - je me demande si l'un des noms de fichiers que vous passez à loadfile() pointe vers un fichier vide, ou une mauvaise mise en forme d'un seul? Si oui, vous pourriez obtenir un tableau retourné, qui est soit 1D, ou même vide (
np.array(None)
ne pas jeter unError
, si vous ne le saurez jamais...). Si vous souhaitez vous prémunir contre cet échec, vous pouvez insérer certains vérification des erreurs dans votreloadfile
fonction.Je vous recommande vivement de votre
for
boucle d'insertion:En Python 2.x ou 3.x et susceptible de révéler la source du problème. Vous pourriez bien trouver, c'est une seule valeur de votre
outputs_l1
liste (c'est à dire un fichier) qui est de donner la question.Le message que vous obtenez n'est pas de l'Exception par défaut de Python:
Pour une nouvelle liste python,
IndexError
est levée uniquement sur l'index n'étant pas dans la gamme (même docs dire).Si nous essayer de passer plusieurs éléments à la liste, ou une autre valeur, nous obtenons le
TypeError
:Cependant, ici, vous semblez être à l'aide de
matplotlib
qui utilise en internenumpy
pour la manipulation des tableaux. À creuser plus profondément à travers le la base de code pournumpy
, nous voyons:où, la méthode de décompression provoquera une erreur si la taille de l'index est plus grand que celui des résultats.
Ainsi, Contrairement à Python qui soulève un
TypeError
sur des Indices, Numpy soulève laIndexError
car il prend en charge les tableaux multidimensionnels.