numpy.convolve
-
numpy.convolve(a, v, mode='full')[source] -
Возвращает дискретную линейную свёртку двух одномерных последовательностей.
Оператор свёртки часто используется в обработке сигналов, где он моделирует эффект линейной системы с постоянными во времени на сигнале [R17]. В теории вероятностей сумма двух независимых случайных величин распределена согласно свёртке их индивидуальных распределений.
Если
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. Произведение свёртки приводится только для точек, где сигналы полностью перекрываются. Значения вне границы сигнала не оказывают никакого влияния.
Возвращает: out : ndarray
Дискретная линейная свёртка
aиv.См. также
scipy.signal.fftconvolve- Свёртка двух массивов с использованием быстрой дискретной фурье-трансформации.
scipy.linalg.toeplitz- Используется для построения оператора свёртки.
polymul- Умножение полиномов. Тот же результат, что и свёртка, но также принимает на вход объекты poly1d.
Примечания
Операция дискретной свёртки определяется как
![(a * v)[n] = \sum_{m = -\infty}^{\infty} a[m] v[n - m]](https://docs.scipy.org/doc/numpy-1.10.1/_images/math/7684e2e27ec39e9a8cdc8f40b7b668cfa06f8dd6.png)
Можно показать, что свёртка
во времени/пространстве эквивалентна умножению
в фурье-области после соответствующего заполнения (заполнение необходимо для предотвращения круговой свёртки). Поскольку умножение более эффективно (быстрее), чем свёртка, функция scipy.signal.fftconvolveиспользует БПФ для вычисления свёртки больших наборов данных.Ссылки
[R17] (1, 2) Wikipedia, “Свёртка”, 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])
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.convolve.html