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

를 내가 156이다 calibdata // 4 때 그래서 4 + 3 calibdata의 끝을 넘어 읽을 * 627이다. –

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