2016-12-14 4 views
0

Je suis un peu confus sur une erreur que je continue de rencontrer. Je ne l'avais pas avant, mais en même temps mes données étaient erronées, donc j'ai dû réécrire le code.Comment résoudre l'erreur Index out of bounds?

exécutant ce qui suit:

plt.figure(figsize=(20,10)) 
x = np.arange(1416, 1426, 0.009766) 

gaverage = np.empty((21,1024), dtype = np.float64) 

calibdata = open(pathc + 'calib_5m.dat').readlines() 

#print(np.size(calibdata))  ||| Yields: 624 
#print(np.size(calibdata)//16) ||| Yields: 39 

calib = np.empty(shape=(np.size(calibdata)//16,1024), dtype=np.float64) 
for i in range(0, np.size(calibdata)//4): 
    calib[i] = calibdata[i*4+3].split() 
caverage = np.average(calib[i] ,axis = 0) 

Rendements ceci:

--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-25-87f3f4739851> in <module>() 
    11 calib = np.empty(shape=(np.size(calibdata)//16,1024), dtype=np.float64) 
    12 for i in range(0, np.size(calibdata)//4): 
---> 13  calib[i] = calibdata[i*4+3].split() 
    14 caverage = np.average(calib[i] ,axis = 0) 
    15 

IndexError: index 39 is out of bounds for axis 0 with size 39 

Maintenant ce que je suis en train de faire ici est de prendre essentiellement chaque ligne 4 dans le fichier lu dans calibdata et écrire à un nouveau tableau, calib [i]. Si les indices sont de la même taille, comment sont-ils hors limites? Je pense qu'il y a une logique fondamentalement erronée de ma part, donc si quelqu'un peut indiquer où je suis en retard, ce serait formidable.

+0

lorsque i est calibdata // 4 156 il est donc i * 4 + 3 est 627 qui va lire au-delà de la fin de calibdata. –

+2

donc je pense que vous avez besoin de i dans la gamme (0, np.size (calibdata) // 4 - 1) –

Répondre

0

calib est initialisé à la taille (39, n). Mais i iterator va bien au-delà:

In [243]: for i in range(np.size(calibdata)//4): 
    ...:  print(i, i*4+3) 
    ...:  
0 3 
1 7 
2 11 
3 15 
4 19 
5 23 
6 27 
7 31 
8 35 
.... 
147 591 
148 595 
149 599 
150 603 
151 607 
152 611 
153 615 
154 619 
155 623 

In [244]: calib=np.zeros((np.size(calibdata)//16),int) 
In [245]: calib.shape 
Out[245]: (39,)