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)]
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
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
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