2016-03-23 13 views
0

を私は以下のコードで働いていますし、インデックスのエラーを取得しています:numpyのエラー:インデックスエラー

index 8 is out of bounds for axis 1 with size 8 and

index 6 is out of bounds for axis 0 with size 6`.

それぞれnp.arrange(8)np.arrange(6)np.arrange(1,9)np.arrange(2,8)を変更する場合はコードがで実行されますエラーはありません。しかし、出力行列Cは期待される結果とは異なる結果を与える。 ijを(0,1,2,3,4,5,6,7)の代わりに(1,2,3,4,5,6,7,8)の値にするにはどうすればよいでしょうか?整数値(2,3,4,5,6,7)のkl?私は

import numpy 
import numpy as np 


A = np.matrix([[8,8,8,7,7,6,8,2], 
       [8,8,7,7,7,6,6,7], 
       [1,8,8,7,7,6,6,6], 
       [1,1,8,7,7,6,7,7], 
       [1,1,1,1,8,7,7,6], 
       [1,1,2,1,8,7,7,6], 
       [2,2,2,1,1,8,7,7], 
       [2,1,2,1,1,8,8,7]]) 


B = np.ones((8,8),dtype=np.int) 

for i in np.arange(1,9): 
    for j in np.arange(1,9): 
     B[i,j] = A[i,j] 

C = np.zeros((6,6),dtype=np.int) 
print C 

D = np.matrix([[1,1,2,3,3,2,2,1], 
       [1,2,1,2,3,3,3,2], 
       [1,1,2,1,1,2,2,3], 
       [2,2,3,2,2,2,1,3], 
       [1,2,2,3,2,3,1,3], 
       [1,2,3,3,2,3,2,3], 
       [1,2,2,3,2,3,1,2], 
       [2,2,3,2,2,3,2,2]]) 
print D 

for k in np.arange(2,8): 
    for l in np.arange(2,8): 


      B[k,l] # point in middle 
      b = B[(k-1),(l-1)] 
      if b == 8: 
       # Matrix C is smaller than Matrix B 
       C[(k-1),(l-1)] = C[(k-1),(l-1)] + 1*D[(k-1),(l-1)] 
+2

numpyとpythonは1ベースのインデックスを使用しないゼロベースのインデックスを使用しているため、インデックス8は範囲外です。 np.arange(A.shape [0])と 'np.arange(A.shape [1])のj ' – Suever

+1

これは文字通りあなたの最後の質問(http://stackoverflow.com/a/36080741/670206)で私は混乱がどこにあるかわからないので、育った。 – Suever

+0

この質問の上にあるテキストは、「複製」よりも大きく異なっています。私は私の答えを 'duplicate'に移しましたが、私の答えはこの質問のテキストを参照しています。 – roadrunner66

答えて

0

CをB(境界を無視)の内側6x6の正方形を見て、「重量」マトリクスの値を決定するように行列Dを使用して行列Cを作成してい覚えてそのPythonの割出し開始0ではなく1であるため、配列は0〜7であり、1〜8ではありません。