2013-04-12 3 views
0

일부 통합을위한 코드를 작성 중입니다. 그러나 나는 어떤 시점 (마지막 두 줄)에 머물러있다. 그것은 인덱스 오류 : 색인 밖으로 경계 말합니다. 내가 뭘하고 싶은지는 - r이 값을 가질 때마다 1의 증가분으로 비어있는 해당 인덱스에 기록해야하므로 값을 추적 할 수 있습니다. 어떤 도움을 주시면 감사하겠습니다. 여기서, 코드 -파이썬 배열 인덱싱

from pylab import* 
from math import* 

dx = 981 
dy = 1043 
bx = 534.4 
by = 109.5 

index = zeros(shape=(1,dx+dy)) 
r=0 
r_max=0 

for i in xrange(1,dy+1): 
    for j in xrange (1,dx+1): 
     if i-by > 0: 
      theta = 180*atan(abs(j-bx)/(i-by))/pi 
      if theta<10: 
       r = round(sqrt((j-bx)**2+(i-by)**2)) 
       if r>0: 
        index[r]+=1 
+2

그냥 일반적인 팁 : 당신은 (일반적으로) foo는 수입 *'에서'사용하지 말아야합니다. 'foo'를 import 한 다음'foo.bar()'를 호출하는 것이 더 낫습니다. 예를 들어, 나는'zero '에 의해 버려졌다. 당신은 말할 수 없습니다. import pylab을 실행하고'pylab.zeros()'를 호출하면 일어나는 일을 이해하는 것이 훨씬 쉬워진다. –

+0

TimPietzcker는 절대적으로 옳습니다. NumPy를 numP.zeros로 추가하면이 코드가 이상한 동작을 만들기 시작할 것입니다. –

+0

은 다음 번에이를 염두에 둡니다. – user2095624

답변

2

index = zeros(shape=(1,dx+dy)) 할 때 상기 어레이의 제 1 축에 액세스 index[r]+=1는 할 때 인덱스 r와 사이즈 (1)의 제 1 축과, 2 차원 배열을 생성되는 > 1.

수 그래서 당신이 원하는 것을 보이는 수있는 것은 두 번째 축을

index = zeros(shape=(dx+dy)) 

을하고 또는 대안 인덱싱하여, 최초의 "쓸모없는"차원을 제거하는 것입니다

index[0, r]+=1 

또는

index[:, r]+=1 
+0

감사합니다. 이제 무엇이 잘못되었는지 이해했습니다. – user2095624

+0

@ user2095624 기꺼이 도와 드리겠습니다. 도움이되는 답변을 찾으면 언제든지 수락하십시오. – shx2