Comment effectuer une convolution 1D en python ?

Published: 16 septembre 2021

Tags: Python; Numpy; Scipy;

DMCA.com Protection Status

Exemples de comment effectuer une convolution 1D en python ?

voir aussi how to convolve two 2-dimensional matrices in python with scipy

Convolution 1D en python

Considérons les données suivantes :

F = [1, 2, 3]
G = [0, 1, 0.5]

Pour calculer la convolution 1d entre F et G : F*G, une solution est d'utiliser numpy.convolve:

C = np.convolve(F,G)

donnera ici

array([0. , 1. , 2.5, 4. , 1.5])

Brève explication sur la façon d'obtenir le résultat ci-dessus. D'abord le noyau G est inversé [0, 1, 0.5] -> [0.5, 1, 0.]

(Étape 1) Calculer C[0] => 0.

f g product
- 0.5 -
- 1 -
1 0 0
2 0 0
3 0 0

$$\sum product = 0$$

(Étape 2) Calculer C[1] => 1.0

f g product
- 0.5 -
1 1 1
2 0 0
3 0 0

$$\sum product = 1$$

(Étape 3) Calculer C[2] => 2.5

f g product
1 0.5 0.5
2 1 2
3 0 0

$$\sum product = 0.5 + 2 = 2.5$$

(Étape 4) Calculer C[3] = 4.

f g product
1 0 0
2 0.5 1
3 1.0 3
- 0.0 -

$$\sum product = 1 + 3 = 4$$

(Étape 5) Calculer C[4] = 1.5

f g product
1 - 0
2 0 0
3 0.5 1.5
- 1.0 -

$$\sum product = 1.5$$

Convolution 1D en utilisant l'option "same"

Pour avoir en sortie une variable de même taille que l'entrée F :

np.convolve(F,G,'same')

donne

array([1. , 2.5, 4. ])

Convolution 1D en utilisant l'option "valid"

np.convolve(F,G,'valid')

donne

array([2.5])

Calcule uniquement :

f g product
1 0.5 0.5
2 1 2
3 0 0

$$\sum product = 0.5 + 2 = 2.5$$

Un autre example

Un autre exemple, créons une fonction rectangulaire en python (voir aussi l'article de wikipedia Convolution)

import numpy as np

def f(x):
        if np.absolute(x) > 0.5:
                y = 0
        else:
                y = 1
        return y

X = np.linspace(-2.0, 2.0, num=100)

F = [f(x) for x in X]

Et calculons par exemple l'autocorrélation

G = [f(x) for x in X]

C = np.convolve(F, G)

Pour visualiser les résultats, nous pouvons d'abord tracer la fonction rectangulaire à l'aide de matplotlib :

import matplotlib.pyplot as plt

plt.plot(X,F)

plt.title("How to perform a 1D convolution in python ?")

plt.savefig("1d_convolution_01.png", bbox_inches='tight', dpi=100)

plt.show()

donne

Comment effectuer une convolution 1D en python ?
Comment effectuer une convolution 1D en python ?

and then plot the autocorrelation:

plt.plot(C)

plt.title("How to perform a 1D convolution in python ?")

plt.savefig("1d_convolution_02.png", bbox_inches='tight', dpi=100)

plt.show()

donne

Comment effectuer une convolution 1D en python ?
Comment effectuer une convolution 1D en python ?

Références

Image

of