numpy.convolve

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

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

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

如果 v 长于 a ,在计算之前交换阵列。

参数
a(n)

第一个一维输入数组。

v(m,)数组

第二个一维输入数组。

mode'full'、'valid'、'same',可选
“满”:

默认情况下,模式为“满”。这将返回每个重叠点的卷积,输出形状为(n+m-1,)。在卷积的终点处,信号没有完全重叠,可能会出现边界效应。

“同一”:

“相同”模式返回长度的输出 max(M, N) . 边界效果仍然可见。

“有效”:

模式“valid”返回长度的输出 max(M, N) - min(M, N) + 1 . 卷积积仅给出信号完全重叠的点。信号边界之外的值不起作用。

返回
out恩达雷

离散线性卷积 av .

参见

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/卷积

实例

请注意卷积运算符如何在两个数组之间“滑动”之前翻转第二个数组:

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