2016-12-14 12 views
0

Я немного смущен ошибкой, с которой сталкиваюсь. Раньше у меня его не было, но в то же время мои данные были неправильными, поэтому мне пришлось переписать код.Как устранить ошибку индекса за пределами границ?

Запуск следующее:

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) 

Урожайность это:

--------------------------------------------------------------------------- 
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 

Теперь то, что я пытаюсь сделать здесь, в основном, принимают каждый 4-ю строку в файле чтения в calibdata и записать его новый массив, calib [i]. Если индексы такого же размера, как они выходят за рамки? Я думаю, что здесь есть какая-то принципиально некорректная логика, поэтому, если кто-нибудь может указать, где я отстаю, это было бы здорово.

+0

, когда я это calibdata // 4 это 156 так я * 4 + 3 627, который будет читать дальше конца calibdata. –

+2

поэтому я думаю, что вам нужно для i в диапазоне (0, np.size (calibdata) // 4 - 1) –

ответ

0

calib инициализирован размером (39, n). Но i итератор выходит далеко за рамки, что:

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,) 

 Смежные вопросы

  • Нет связанных вопросов^_^