Spec-Zone.ru › NumPy 1.15

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’:

По умолчанию, режим — ‘full’. Это возвращает свёртку в каждой точке перекрытия с формой выходного массива (N+M-1,). На концах свёртки сигналы не перекрываются полностью, и могут наблюдаться краевые эффекты.

‘same’:

Режим ‘same’ возвращает выходной массив длиной max(M, N). Краевые эффекты всё ещё видны.

‘valid’:

Режим ‘valid’ возвращает выходной массив длиной max(M, N) - min(M, N) + 1. Произведение свёртки даётся только для точек, где сигналы перекрываются полностью. Значения за пределами границы сигнала не имеют эффекта.

Возвращает:
out : 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] (1, 2) Википедия, «Свёртка», http://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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.convolve.html

Spec-Zone.ru

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