Spec-Zone.ru › NumPy 1.21

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://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BA%D0%B0

Примеры

Обратите внимание, как оператор свёртки переворачивает второй массив перед «передвижением» двух массивов друг относительно друга:

>>> 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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.convolve.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API