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

今私がここで何をしようとしている基本的にcalibdataに読まファイル内のすべての4番目の行を取り、それを書き込んで新しい配列、calib [i]。インデックスが同じサイズの場合、どのように境界から外れていますか?私はここに根本的に欠陥のある論理があると思うので、誰かが私がどこに足りなくなっているかを指摘できれば、それは素晴らしいだろう。

+0

私はcalibdata // 4であるとき、それはので、私は4 + 3はcalibdataの終わりを超えて読みます627です* 156です。 –

+2

私はあなたが範囲(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,) 
関連する問題