1. 程式人生 > 其它 >numpy的convolve方法的運算邏輯

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

②將序列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的長度計算出來,關係如下圖: