numpy.convolve #

麻木的。卷积( a , v , mode = 'full' ) [来源] #

返回两个一维序列的离散线性卷积。

卷积算子经常出现在信号处理中,它模拟线性时不变系统对信号的影响[1]。在概率论中,两个独立随机变量的总和根据其各自分布的卷积进行分布。

如果v比a长,则在计算之前交换数组。

参数
一个(N,) 类数组

第一个一维输入数组。

v (M,) 类似数组

第二个一维输入数组。

模式{'完整', '有效', '相同'}, 可选
'满的':

默认情况下,模式为“完整”。这将返回每个重叠点的卷积,输出形状为 (N+M-1,)。在卷积的端点,信号不完全重叠,并且可能会看到边界效应。

'相同的':

模式 'same' 返回 length 的输出。边界效应仍然可见。max(M, N)

'有效的':

模式“valid”返回 length 的输出 。仅针对信号完全重叠的点给出卷积积。信号边界之外的值没有影响。max(M, N) - min(M, N) + 1

返回
输出数组

av的离散线性卷积。

也可以看看

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利用 FFT 来计算大型数据集的卷积。

参考

[ 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])