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的長度計算出來,關系如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM