如何解决索引越界错误?

How to solve Index out of bounds error?

我对 运行 犯的一个错误感到有点困惑。之前是没有的,但是同时我的数据是错误的,只好重写代码了。

运行 以下:

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

现在我在这里尝试做的基本上是在 calibdata 中读取文件中的每 4 行并将其写入一个新数组 calib[i]。如果索引大小相同,它们是如何越界的?我认为我的逻辑存在一些根本性的缺陷,所以如果有人能指出我的不足之处,那就太好了。

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