NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍一下NumPy中convolve方法的使用。

numpy.convolve

numpy.convolve(a, v, mode='full') [source]

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

卷积算子在信号处理中经常见到,它在信号上模拟了线性时不变系统的效果[1]。在概率论中,两个独立随机变量之和是根据它们各自分布的卷积分布的。

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

参数:

a :(N,) array_like

第一个一维输入数组。

v :(M,) array_like

第二个一维输入数组。

out :array, 可选

mode{‘full’, ‘valid’, ‘same’}, 可选

1) ‘full’:

默认情况下,模式为'full'

这将在每个重叠点返回卷积,

输出形状为(N + M-1,)。在卷积的端点,

信号没有完全重叠,并且可以看到边界效应。

2) ‘same’:

模式‘same’返回长度max(M, N)的输出。

边界效果仍然可见。

3) ‘valid’:

模式 ‘valid’返回长度max(M, N) - min(M, N) + 1的输出 。

卷积仅针对信号完全重叠的点给出。

信号边界之外的值无效。

返回值:

outndarray

a和v的离散线性卷积。

Notes

离散卷积运算定义为

a  vn  sum_m  -inftyinfty am vn - m

可以证明,在适当的填充之后

xt  yt

时间/空间的卷积等于

Xf Yf

傅立叶域中的乘法(必须填充以防止循环卷积)。

由于乘法比卷积更有效(更快),

因此该函数scipy.signal.fftconvolve利用FFT来计算大数据集的卷积。

参考文献

[1]Wikipedia,“Convolution”, https://en.wikipedia.org/wiki/Convolution

例子

请注意,卷积运算符如何翻转第二个数组,然后才将它们 “sliding” 在一起:

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

推荐文档

相关文档

大家感兴趣的内容

随机列表