2016-11-03 2 views
1

Lassen Sie uns sagen, ich habe eine 2d numpy Array der Größe (5,5). Ich kann die Nachbarn des Index (i, j) der folgenden Aussage erhalten:Numpy bekommen Nachbarn immer als 3x3 Matrix

a = range(25) 
a = np.reshape(a, (5,5)) 

n = a[i-1:i+2, j-1:j+2] 

Das für 0 < i,j < 4 große Werke. Mein Problem ist, dass ich immer ein 3x3 Array erhalten möchten, aber wenn einer der Indizes 0 oder 4 Ich verstehe es nicht (im Fall i=0 der Bereich (-1, 2) = (4, 2) und wir bekommen einen leeren Bereich)

Haben Sie irgendwelche Ideen, wie ich immer eine 3x3 Matrix bekommen und die "gescheiterten Indizes" mit Nullen füllen kann?

Antwort

3

Verwenden Sie np.pad, um Ihr Array zuerst zu erweitern und stattdessen in das Ergebnis zu indizieren. Sie müssen Ihre Indizes entsprechend verschieben.

>>> b = np.pad(a, pad_width=1, mode='constant') 
>>> b 
array([[ 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 1, 2, 3, 4, 0], 
     [ 0, 5, 6, 7, 8, 9, 0], 
     [ 0, 10, 11, 12, 13, 14, 0], 
     [ 0, 15, 16, 17, 18, 19, 0], 
     [ 0, 20, 21, 22, 23, 24, 0], 
     [ 0, 0, 0, 0, 0, 0, 0]]) 
>>>