numpy.convolve#

numpy.convolve(a, v, mode='full')[源代码]#

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

卷积运算符通常出现在信号处理中,它模拟线性时不变系统对信号的影响 [1] .在概率论中,两个独立随机变量的和根据它们的个体分布的卷积进行分布.

如果 va 长,则在计算之前交换数组.

参数:
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

av 的离散线性卷积.

参见

scipy.signal.fftconvolve

使用快速傅立叶变换卷积两个数组.

scipy.linalg.toeplitz

用于构造卷积算子.

polymul

多项式乘法.与 convolve 相同的输出,但也接受 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]

Wikipedia,"卷积",https://en.wikipedia.org/wiki/Convolution

示例

请注意,卷积运算符在"滑动"两个数组之前会翻转第二个数组:

>>> import numpy as np
>>> 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])