numpy.convolve
- numpy.convolve(a, v, mode='full')[source]
-
Возвращает дискретную линейную свёртку двух одномерных последовательностей.
Оператор свёртки часто используется в обработке сигналов, где он моделирует эффект линейной стационарной системы на сигнал [1]. В теории вероятностей сумма двух независимых случайных величин распределена в соответствии со свёрткой их индивидуальных распределений.
Если
vдлиннееa, массивы меняются местами перед вычислением.- Параметры:
-
- a(N,) array_like
-
Первый одномерный входной массив.
- v(M,) array_like
-
Второй одномерный входной массив.
- mode{‘full’, ‘valid’, ‘same’}, optional
-
- ‘full’:
-
По умолчанию, mode равен ‘full’. Это возвращает свёртку в каждой точке перекрытия с формой выходного массива (N+M-1,). На концах свёртки сигналы не перекрываются полностью, и могут наблюдаться граничные эффекты.
- ‘same’:
-
Режим ‘same’ возвращает выходной массив длиной
max(M, N). Граничные эффекты всё ещё видны. - ‘valid’:
-
Режим ‘valid’ возвращает выходной массив длиной
max(M, N) - min(M, N) + 1. Произведение свёртки задаётся только для точек, где сигналы перекрываются полностью. Значения вне границы сигнала не оказывают влияния.
- Возвращает:
-
- outndarray
-
Дискретная линейная свёртка
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
Примеры
Обратите внимание, как оператор свёртки переворачивает второй массив перед «перемещением» двух массивов друг по другу:
>>> 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])
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.convolve.html