numpy.convolve#
- numpy.convolve(a, v, mode='full')[источник]#
Возвращает дискретную, линейную свертку двух одномерных последовательностей.
Оператор свёртки часто встречается в обработке сигналов, где он моделирует влияние линейной стационарной системы на сигнал [1]. В теории вероятностей сумма двух независимых случайных величин распределена в соответствии со сверткой их индивидуальных распределений.
Если v длиннее, чем a, массивы меняются местами перед вычислением.
- Параметры:
- a(N,) array_like
Первый одномерный входной массив.
- v(M,) array_like
Второй одномерный входной массив.
- mode{'full', 'valid', 'same'}, опционально
- ‘full’:
По умолчанию режим — 'full'. Это возвращает свертку в каждой точке перекрытия с выходной формой (N+M-1,). На конечных точках свертки сигналы не перекрываются полностью, и могут наблюдаться граничные эффекты.
- 'same':
Режим 'same' возвращает вывод длиной
max(M, N). Граничные эффекты всё ещё видны.- 'valid':
Режим 'valid' возвращает вывод длиной
max(M, N) - min(M, N) + 1. Произведение свертки дается только для точек, где сигналы полностью перекрываются. Значения за границами сигнала не оказывают эффекта.
- Возвращает:
- выходndarray
Дискретная, линейная свёртка a и v.
Смотрите также
scipy.signal.fftconvolveСвертка двух массивов с использованием быстрого преобразования Фурье.
scipy.linalg.toeplitzИспользуется для построения оператора свертки.
polymulУмножение полиномов. Тот же вывод, что и у свертки, но также принимает объекты poly1d в качестве входных данных.
Примечания
Операция дискретной свёртки определяется как
\[(a * v)_n = \sum_{m = -\infty}^{\infty} a_m v_{n - m}\]Можно показать, что свёртка \(x(t) * y(t)\) во времени/пространстве эквивалентна умножению \(X(f) Y(f)\) в частотной области, после соответствующего дополнения (дополнение необходимо для предотвращения циклической свертки). Поскольку умножение более эффективно (быстрее), чем свертка, функция
scipy.signal.fftconvolveиспользует БПФ для вычисления свёртки больших наборов данных.Ссылки
[1]Википедия, "Свёртка", https://en.wikipedia.org/wiki/Convolution
Примеры
Обратите внимание, как оператор свертки переворачивает второй массив перед «скольжением» их друг по другу:
>>> import numpy as np >>> np.convolve([1, 2, 3], [0, 1, 0.5]) array([0. , 1. , 2.5, 4. , 1.5])
Возвращать только средние значения свёртки. Содержит граничные эффекты, где нули учитываются:
>>> np.convolve([1,2,3],[0,1,0.5], 'same') array([1. , 2.5, 4. ])
Два массива имеют одинаковую длину, поэтому существует только одна позиция, где они полностью перекрываются:
>>> np.convolve([1,2,3],[0,1,0.5], 'valid') array([2.5])