2016-03-23 12 views
0

ich mit dem Code arbeite unten und bin immer einen Index Fehler:Numpy Fehler ‚np.arange‘ mit: Index Fehler

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`.

Wenn np.arrange(1,9) und np.arrange(2,8) zu np.arrange(8) und np.arrange(6) zu ändern bzw. den Code läuft mit keine Fehler. Die Ausgangsmatrix C gibt jedoch andere Ergebnisse als erwartet. Was ist, wenn ich i und j eine ganze Zahl mit Werten (1,2,3,4,5,6,7,8) anstelle von (0,1,2,3,4,5,6,7) und wollen k und l mit ganzzahligen Werten (2,3,4,5,6,7)? Ich schaffe eine Matrix C, die an der inneren 6x6 Quadrat von B (ohne Berücksichtigung der Grenze) und verwendet die Matrix D als ‚Gewicht‘ aussieht, wenn die Werte der Matrix C. Bestimmung

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 und python verwenden Zero-basierte Indizierung nicht 1-basierte Indizierung, so dass Index 8 außerhalb der Grenzen ist. Sie wollen wahrscheinlich 'np.arange (8)' oder robuster: 'i in np.arange (A.shape [0])' und 'j in np.arange (A.shape [1])' – Suever

+1

Das war wörtlich [in Ihrer letzten Frage] (http://stackoverflow.com/a/36080741/670206) angesprochen, so bin ich mir nicht sicher, wo die Verwirrung ist. – Suever

+0

Der Text über dieser Frage ist anders und wesentlich klarer als das "Duplikat". Ich habe meine Antwort auf das "Duplikat" verschoben, aber meine Antwort bezieht sich auf den Text in dieser Frage. – roadrunner66

Antwort

0

Denken Sie daran, dass Python Indexierungs beginnt bei 0, nicht 1, also würde Ihr Array von 0-7, nicht 1-8 sein.