indice 4 est en dehors des limites de l'axe 1 à la taille 4, du Code, avec le Double de la Somme
Salut j'ai la fonction suivante, qui produit une erreur de limites:
import numpy as np
import pylab as plt
import scipy
import math
import sympy as sy
T = sy.Symbol('T')
rho = sy.Symbol('rho')
g_T = [1,T,T**2,T*sy.log(T),T**2*sy.log(T)]
g_rho = [1,rho,rho**2,rho*sy.log(rho),rho**2*sy.log(rho)]
g_T_np = np.asarray(g_T)
g_rho_np = np.asarray(g_rho)
c = np.loadtxt("c_test.txt")
def F(T,rho):
ret = 0
for n in xrange(1,5):
for m in xrange(1,6):
inner= c[n,m]*g_T_np*g_rho_np
ret += inner
return ret
print F(T,rho)
où la .fichier txt comme ceci:
-0.529586 -0.000208559 -3.36563E-09 2.29441E-05
2.22722E-06 -0.00014526 -2.48888E-09 1.89488E-05
-6.26662E-05 0.000421028 6.17407E-09 -5.14488E-05
0.09977346 -0.000622051 -8.56485E-09 7.49956E-05
-0.01437627 -9.86754E-05 -1.59808E-09 1.22574E-05
Le message d'erreur est affiché:
Traceback (most recent call last):File "EOS_test.py", line 38, in <module> print F(T,rho) File "EOS_test.py", line 31, in F inner=c[n,m]*g_T_np*g_rho_np IndexError: index 4 is out of bounds for axis 1 with size 4
Comment puis-je résoudre cette erreur?
- Salut Shaun, bienvenue à Débordement de Pile. J'ai corrigé votre mise en forme. Pour référence future, le code (et les choses que vous voulez ressembler à code) est mis en forme simplement par l'indentation (au moins) 4 espaces. Vous pouvez également sélectionner le code et cliquez sur le bouton dans l'éditeur qui ressemble à
{}
. - Vous pouvez poster l'erreur exacte, et indiquer la ligne à laquelle il se produit dans?
- merci beaucoup pour la mise en forme semble beaucoup mieux! Et merci pour l'info, comment le faire à l'avenir. L'erreur ressemble à ceci \ Traceback (most recent call last):File "EOS_test.py", à la ligne 38, in <module> print F(T,rho) Fichier "EOS_test.py", à la ligne 31, dans F intérieure= c[n,m]*g_T_np*g_rho_np IndexError: indice 4 est en dehors des limites de l'axe 1 à la taille 4
- a toujours l'air terrible ... est-ce de travailler dans les commentaires ainsi? 🙂 sry
- Les commentaires ont limité les capacités de mise en forme. (Cliquez sur l'aide de la boîte de commentaires pour voir ce que.) Votre meilleur pari, surtout pour de l'information pertinente à la question, est de modifier la question avec l'information supplémentaire. Veuillez le faire, même si j'ai déjà répondu. 🙂
Vous devez vous connecter pour publier un commentaire.
Numpy utilise de 0 basée sur l'indexation. Apparemment vous êtes l'indexation du tableau à partir de 1 (2e position) à 4 (5ème position), ce qui est évidemment en dehors des limites du tableau et que vous travaillez avec. La même chose est vraie pour le second axe.
Deuxièmement, vous avez mélangé les deux axes:
Cela devrait fonctionner:
Votre problème est dans la définition de votre
xrange
s.Python listes (et np tableaux) sont 0 indexés, donc vous ne voulez pas les indices [1,2,3,4,5] et [1,2,3,4,5,6], mais, au contraire, veulent
[0,1,2,3,4] et [0,1,2,3,4,5][0,1,2,3] et [0,1,2,3,4].De la configuration de votre boucles for comme ceci permettrait de résoudre votre problème:
Ou, vous pouvez profiter de xrange par défaut de point de départ, et tout simplement la liste d'un seul paramètre:
Aussi, pour une "plus pythonic" solution, au lieu d'avoir des boucles for imbriquées, chercher comment itérer sur une ndarray. Le docs donne cet exemple:
Cela évite tout problème d'avoir besoin de connaître la taille du tableau que vous importez, et est donc beaucoup plus forte.
Modifier: Comme pdowling mentionné dans sa réponse, la plage de numéros doit être 4 et 5. J'avais laissé 5 et 6 dans mon aswer, et ont maintenant changé.
for n in xrange(0,4): for m in xrange(0,5):
essayé avant ne fonctionne pas. Pas plus que les autres options. Je pense que @pdowling était juste parce que quand je suis passé de l'axe, il a travaillé. Mais merci pour votre réponse rapide