当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy convolve用法及代码示例


本文简要介绍 python 语言中 numpy.convolve 的用法。

用法:

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

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

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

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

参数

a (N,) 数组

第一个一维输入数组。

v (M,) 数组

第二个一维输入数组。

mode {‘full’, ‘valid’, ‘same’},可选
‘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 利用 FFT 来计算大型数据集的卷积。

参考

1

维基百科,“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])

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.convolve。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。