numpy的convolve方法的运算逻辑

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,如下图:

 

numpy的convolve方法的运算逻辑

 

 

②将序列1中的1,2,3,4分别与序列2中的第二个元素1,分别做乘法,得到结果序列2,如下图:

 

 

numpy的convolve方法的运算逻辑

 

 

 

③将序列1中的1,2,3,4分别与序列2中的第三个元素0.5,分别做乘法,得到结果序列3,如下图:

 

numpy的convolve方法的运算逻辑

 

 

 

第三步

将第二步中得到的三个结果序列,列竖式,但是每个序列都比上一个序列缩进一个元素,然后三个序列做加法运算,如下图

 

numpy的convolve方法的运算逻辑

 

 

 

第四步

根据第三个参数mode的值,来决定该方法的最终输出结果。

①当mode = "full"时

输出结果为第三步中加法运算所得到的全部数值序列,即0, 1, 2.5, 4, 5.5, 2

 

②当mode = "same"时

输出结果为第三步中加法运算所得到的全部数值序列中的中间部分,通俗地说,就是掐头去尾,最终结果是1, 2.5, 4, 5.5

 

③当mode = "valid"时

输出结果是三个相加的序列重合部分的数值的和(三个序列都有参与相加,所得到的和),即2.5,4,直观看如下图中的红框部分:

 

numpy的convolve方法的运算逻辑

 

 

最终的结果的序列长度,可以根据a和v的长度计算出来,关系如下图:

numpy的convolve方法的运算逻辑

上一篇:Flutter——最详细的Image(图像)使用教程


下一篇:Mysql sql_mode的合理设置