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
- 返回:
- 输出数组
a和v的离散线性卷积。
也可以看看
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])