Faltung ist ein mathematischer Operator, der hauptsächlich in der Signalverarbeitung verwendet wird. Numpy verwendet einfach diese Signalverarbeitungsnomenklatur, um sie zu definieren, daher die "Signal" -Referenzen. Ein Array in Numpy ist ein Signal. Die Faltung von zwei Signalen ist definiert als das Integral des ersten Signals, das umgekehrt , über das zweite Signal gewobbelt ("gefaltet auf") und an jeder Position überlappender Vektoren (mit dem Skalarprodukt) multipliziert wird. Das erste Signal wird oft als Kernel bezeichnet , insbesondere wenn es sich um eine 2D-Matrix in der Bildverarbeitung oder in neuronalen Netzen handelt und die Umkehrung zu einer Spiegelung in 2D (NICHT transponieren) wird. Es kann anhand der Animationen auf Wikipedia besser verstanden werden .
Faltungen haben je nach Kontext mehrere Definitionen. Einige beginnen die Faltung, wenn die Überlappung beginnt, während andere beginnen, wenn die Überlappung nur teilweise ist. Im "gültigen" Modus von numpy wird die Überlappung so angegeben, dass sie immer vollständig ist. Es wird als "gültig" bezeichnet, da jeder im Ergebnis angegebene Wert ohne Datenextrapolation erfolgt.
Wenn Ihr Array X beispielsweise eine Länge von 2 und Ihr Array Y eine Länge von 4 hat, erhalten Sie durch die Faltung von X auf Y im "gültigen" Modus ein Array mit der Länge 3.
Erster Schritt für X = [4 3]
und Y = [1 1 5 5]
:
[3 4] (X is reversed from [4 3] to [3 4], see note)
[1 1 5 5]
= 3 * 1 + 4 * 1 = 7
Hinweis: Wenn X nicht umgekehrt würde, würde die Operation als Kreuzkorrelation anstelle einer Faltung bezeichnet.
Zweiter Schritt:
[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23
Dritter Schritt:
[3 4]
[1 1 5 5]
= 3 * 5 + 4 * 5 = 35
Das Ergebnis der Faltung für den Modus "gültig" wäre dann [7 23 35].
Wenn die Überlappung als ein einzelner Datenpunkt angegeben wird (wie im Modus "voll"), hätte das Ergebnis ein Array der Länge 5 ergeben. Der erste Schritt ist:
[3 4]
[1 1 5 5]
= 3 * undefined (extrapolated as 0) + 4 * 1 = 4
Und so weiter. Es gibt weitere Extrapolationsmodi.