2016-06-22 12 views
1

Während ich bereits die Dokumentation über scipy.ndimage.convolve Funktion gefunden habe und ich "praktisch weiß, was es tut", wenn ich versuche, die resultierenden Arrays zu berechnen, kann ich nicht die mathematische Formel folgen . Nehmen wir zum Beispiel:Mathematik hinter scipy.ndimage.convolve

a = np.array([[1, 2, 0, 0],` 
      [5, 3, 0, 4], 
      [0, 0, 0, 7], 
      [9, 3, 0, 0]]) 

k = np.array([[1,1,1],[1,1,0],[1,0,0]]) 

from scipy import ndimage 

ndimage.convolve(a, k, mode='constant', cval=0.0) 

# Why is the result like this ? 

array([[11, 10, 7, 4], 
     [10, 3, 11, 11], 
     [15, 12, 14, 7], 
     [12, 3, 7, 0]]) 

Ich würde eine Schritt für Schritt Berechnung schätzen.

Vielen Dank im Voraus!

Antwort

0

Nur aufwärmen betrachten

k = np.array ([[1,0,0], [0,1,0], [0,0,0]])

statt wenn Sie dann Ihre k,

ndimage.convolve (a, k, mode = 'constant', CVAL = 0,0)

Sie

array([[4, 2, 4, 0], 
     [5, 3, 7, 4], 
     [3, 0, 0, 7], 
     [9, 3, 0, 0]]) 

erhalten und beachten Sie, dass jedes Element ist die Summe seiner eigenen Position (aufgrund der 2. 1 in k) und der darunter und rechts (aufgrund der 1. 1 in k), dh die 4 in der oberen Ecke ist von der ursprünglichen 1 in der oberen Ecke plus die 3 diagonal runter davon. Der (möglicherweise) verwirrende Teil ist, dass die Wirkung des k entgegengesetzt zu dem ist, was man erwarten könnte, dh für das k oben könnte man erwarten, dass die erste 1 den Wert über und nach links anstatt nach unten und addiert auf der rechten Seite.

Jetzt zurück zu Ihrem: die 12 (3 unten und 2 quer) ist die Summe von 9 + 3 + 0 + 0 + 0 + 0.

Beachten Sie, dass alles außerhalb der Matrix als 0 angenommen wird.

+0

Ich bin sehr dankbar für Ihre Erklärung. Ich verstehe endlich, wie diese Werte berechnet wurden / –