NumPy参考 >例行程序 >Mathematical functions > numpy.convolve
numpy.
convolve
(a,v,mode ='full' )[源代码] ¶返回两个一维序列的离散线性卷积。
卷积算子在信号处理中经常见到,它在信号上模拟线性时不变系统的效果[1]。在概率论中,两个独立随机变量之和是根据它们各自分布的卷积分布的。
如果v大于a,则在计算之前交换数组。
第一个一维输入数组。
第二个一维输入数组。
默认情况下,模式为“完整”。这将在每个重叠点返回卷积,输出形状为(N + M-1,)。在卷积的端点,信号没有完全重叠,并且可以看到边界效应。
模式“ same”返回length的输出。边界效果仍然可见。max(M, N)
模式“有效”返回length的输出
。卷积仅针对信号完全重叠的点给出。信号边界之外的值无效。max(M, N) - min(M, N) + 1
a和v的离散线性卷积。
也可以看看
scipy.signal.fftconvolve
使用快速傅立叶变换对两个数组进行卷积。
scipy.linalg.toeplitz
用于构造卷积运算符。
polymul
多项式乘法。与卷积输出相同,但也接受poly1d对象作为输入。
笔记
离散卷积运算定义为
可以证明,在适当的填充之后,时间/空间上的卷积等同
于傅立叶域中的乘法(必须填充以防止循环卷积)。由于乘法比卷积更有效(更快),因此该函数
scipy.signal.fftconvolve
利用FFT来计算大数据集的卷积。
参考文献
Wikipedia,“卷积”, 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])