函数
numpy.convolve(a, v, mode='full'), 这是 numpy 函数中的卷积函数库
参数:
a:(N,)输入的一维数组
b:(M,)输入的第二个一维数组
mode:{'full', 'valid', 'same'}参数可选
'full' 默认值, 返回每一个卷积值, 长度是 N+M-1, 在卷积的边缘处, 信号不重叠, 存在边际效应.
'same' 返回的数组长度为 max(M, N), 边际效应依旧存在.
'valid' 返回的数组长度为 max(M,N)-min(M,N)+1, 此时返回的是完全重叠的点. 边缘的点无效.
直观理解
数字输入的是离散信号, 如下图.
已知 x[0] = a,x[1]=b,x[2]=c
已知 y[0]=i,y[1]=j,y[2]=k
下面演示 x[n]*y[n]过程
第一步, x[n]乘以 y[0]并平移到位置 0:
第二步, x[n]乘以 y[1]并平移到位置 1:
第三步, x[n]乘以 y[2]并平移到位置 2:
最后, 把上面三个图叠加, 就得到了 x[n] * y[n]:
公式及代码
公式:
代码:
由上面的公式可以直接得到下面的数组
- >>> np.convolve([1, 2, 3], [0, 1, 0.5])
- array([ 0. , 1. , 2.5, 4. , 1.5])
- 1
- 2
数组中的 5 个点分别最后一张图片中的五个值
- >>> np.convolve([1,2,3],[0,1,0.5], 'same')
- array([ 1. , 2.5, 4. ])
- 1
- 2
三个值分别对应图片中的 (1,2,3) 三个下标的值
- >>> np.convolve([1,2,3],[0,1,0.5], 'valid')
- array([ 2.5])
- 1
- 2
对应图片坐标为 2 的值
---------------------
来源: http://www.bubuko.com/infodetail-3015809.html