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 в качестве входных данных.
Примечания
Операция дискретной свёртки определяется как
Можно показать, что свёртка
во времени/пространстве эквивалентна умножению
в пространстве Фурье после соответствующего заполнения (заполнение необходимо для предотвращения круговой свёртки). Поскольку умножение более эффективно (быстрее), чем свёртка, функция
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