Comprendre la Convolve de NumPy

pour calculer une moyenne mobile simple,numpy.convolve semble faire le travail.

Question: Comment faire le calcul quand vous utilisez np.convolve(values, weights, 'valid')?

quand les docs ont mentionné convolution product is only given for points where the signals overlap completely, à quoi font référence les 2 signaux?

si des explications peuvent inclure des exemples et des illustrations, elles seront extrêmement utiles.

window = 10
weights = np.repeat(1.0, window)/window
smas = np.convolve(values, weights, 'valid')
38
demandé sur mtrw 2013-11-18 01:53:15

1 réponses

la Convolution est un opérateur mathématique principalement utilisé dans le traitement du signal. Num PY utilise simplement cette nomenclature de traitement de signal pour la définir, d'où les références "signal". Un tableau dans numpy est un signal. La convolution de deux signaux est définie comme l'intégrale du premier signal, inversé, en balayant ("convolved on") le second signal et en multipliant (avec le produit scalaire) à chaque position de vecteurs se chevauchant. Le premier signal est souvent appelé kernel, surtout quand il s'agit d'une matrice 2-D dans traitement de l'image ou les réseaux neuronaux, et le renversement devient miroir en 2-d (PAS de transposition). Il peut être plus clairement compris en utilisant les animations sur wikipédia.

Circonvolutions avoir plusieurs définitions selon le contexte. Certains commencent la convolution quand le chevauchement commence alors que d'autres commencent quand le chevauchement n'est que partiel. Dans le cas du mode "valide" de num PY, le chevauchement est spécifié pour être toujours complet. Il est appelé "valide" puisque chaque valeur donnée dans le résultat est fait sans extrapolation de données.

par exemple, si votre tableau X a une longueur de 2 et votre tableau Y une longueur de 4, la convolution de X sur Y en mode "valide" vous donnera un tableau de longueur 3.

première étape, pour X = [43] et Y = [1 1 5 5]:

[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 1 = 7

Deuxième Étape:

  [3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23

Troisième étape:

    [3 4]
[1 1 5 5]
= 3 * 5 + 4 * 5 = 35

le résultat de La convolution pour le mode "valide" serait alors [7 23 35].

si le chevauchement est spécifié comme un seul point de données (comme dans le cas du mode "full"), le résultat vous aurait donné un tableau de longueur 5. La première étape étant:

[3 4]
  [1 1 5 5]
= 3 * undefined (extrapolated as 0) + 4 * 1 = 4

Et ainsi de suite. Plus d'extrapolation modes existent.

81
répondu Soravux 2017-01-01 23:12:05