numpy的convolve方法,根据其函数注释可知,其功能是返回两个一维序列的离散线性卷积。
详见:https://github.com/numpy/numpy/blob/v1.19.0/numpy/core/numeric.py#L720-L817
该方法有三个参数,分别是
1. 第一个一维序列a
2. 第二个一维序列v
3. 计算这个卷积的模式mode,可选值有三种:"full","same","valid",默认值是"full"。
下面举例来解释如何以该方法的方式计算这个“一维序列的离散线性卷积”。
假设序列a为列表[1,2,3,4],序列v为[0,1,0.5],mode按照其可能取值,分三种情况在下面分别说明。
第一步
把a,v之间长度较长的那个序列,作为序列1,较短的序列作为序列2,如果a和v长度相等的时候,就把a当作序列1,v当作序列2即可(结果是相同的)
本例中a的长度为4,v的长度为3,所以序列1是a,序列2是v。
第二步
将序列1中的每个元素,分别与序列2中的每个元素,做乘法运算。比如本例:
① 将序列1中的1,2,3,4分别与序列2中的第一个元素0,分别做乘法,得到结果序列1,如下图:
②将序列1中的1,2,3,4分别与序列2中的第二个元素1,分别做乘法,得到结果序列2,如下图:
③将序列1中的1,2,3,4分别与序列2中的第三个元素0.5,分别做乘法,得到结果序列3,如下图:
第三步
将第二步中得到的三个结果序列,列竖式,但是每个序列都比上一个序列缩进一个元素,然后三个序列做加法运算,如下图
第四步
根据第三个参数mode的值,来决定该方法的最终输出结果。
①当mode = "full"时
输出结果为第三步中加法运算所得到的全部数值序列,即0, 1, 2.5, 4, 5.5, 2
②当mode = "same"时
输出结果为第三步中加法运算所得到的全部数值序列中的中间部分,通俗地说,就是掐头去尾,最终结果是1, 2.5, 4, 5.5
③当mode = "valid"时
输出结果是三个相加的序列重合部分的数值的和(三个序列都有参与相加,所得到的和),即2.5,4,直观看如下图中的红框部分:
最终的结果的序列长度,可以根据a和v的长度计算出来,关系如下图: