2016-12-14 50 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

所以我认为你需要我在范围内(0,np.size(calibdata)// 4 - 1) –

回答

0

calib初始化为size(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,)