numpy.convolve

numpy.convolve(a, v, mode='full')

Функция convolve() возвращает дискретную линейную свертку двух одномерных последовательностей.

Массивы a и v не обязаны быть одинаковой длинны, но если массив v длиннее чем a, то перед началом вычислений они меняются местами.

Параметры:
a, v - массивы или подобные массивам объекты
Входные массивы с длиннами (N,) и (M,) соответственно (N и M могут быть как равны, так и нет).
mode - {‘full’, ‘valid’, ‘same’}, необязательный параметр
Определяет режим вычисления линейной свертки:
‘full’
Режим установленный по умолчанию. В данном режиме функция вычисляет свертку в каждой точке перекрытия, а длина выходного массива будет равна (N + M - 1,). На краях свертки массивы могут перекрываться не полностью, что вызывает граничные эффекты.
‘valid’
Возвращает массив длинны max(N, M), при этом так же наблюдаются граничные эффекты.
‘same’
Свертка вычисляетя только в точках с перекрытием сигналов, поэтому граничные эффекты не возникают. Длина результирующего массива определяется как max(N,M) - min(N, M) + 1
Возвращает:
результат - массив NumPy
Дискретную линейную свертку массивов a и v.

Замечание

Дискретная линейная свертка очень часто необходима при работе с сигналами или случайными величинами. Вычисляется свертка двух сигналов по формуле:

$$(a\ast v)\lbrack n\rbrack=\sum_{m=-\infty}^\infty a\lbrack m\rbrack v\lbrack n-m\rbrack$$

Если вы вычисляете свертку больших наборов данных, то целесообразнее использовать функцию scipy.signal.fftconvolve.

Смотрите так же:
Свёртка последовательностей - https://ru.wikipedia.org/wiki/Свёртка_последовательностей

Примеры

>>> import numpy as np
>>>
>>> a = np.array([0, 1, 2, 3, 2, 1, 0])
>>> v = np.array([1, 2, 2.7, 2.9, 1, 2, 2.7])
>>> 
>>> #  Обеспечим вывод массивов целиком:
... np.set_printoptions(threshold=np.nan)
>>> 
>>> np.convolve(a, b)
array([ 0. ,  1. ,  4. ,  9.7, 16.3, 19.9, 20.1, 18.2, 16.3, 13.1,  7.4,
        2.7,  0. ])
>>> 
>>> np.convolve(a, b, mode = 'same')
array([ 9.7, 16.3, 19.9, 20.1, 18.2, 16.3, 13.1])
>>> 
>>> np.convolve(a, b, mode = 'valid')
array([20.1])