对卷积(convolution)的理解

参考文章
 
numpy中的一维的卷积
 
 

np.convolve([1,2,3,4],[1,1,3],\'full\')       对卷积(convolution)的理解 - oliverPP

 

                                                              n                              m
                                                  a(被卷积函数)           v(内核)
----------------------------------full-------------------------------------
full模式下
step1:1 2 3  4                          a[n]*v[0]
step2 :    1 2  3   4                     a[n]*v[1]
step3 :       3  6   9  12               a[n]*v[2]                
得出卷积的结果是 1 3 8 13 13 12   结果个数是 n+m-1
----------------------------------valid-------------------------------------
valid模式下 数学计算方法
 
=将 v偏转180度,变成[3,1,1]*   [1]           [3,1,1]*   [2]           
                                                       [2]                                [3] 
                                                       [3]                                [4] 
                                                       
= [8,13]
如果按照实际意义,就是取完全重合的情况
 
 
对卷积(convolution)的理解 - oliverPP

 

 
--------------------------------same-----------------------------------------
same模式下 数学计算方法 ,a前后各补一个0,卷积四次
=将 v偏转180度,变成[3,1,1]*   [0]           [3,1,1]*   [1]           [3,1,1]*   [2]           [3,1,1]*   [3]           
                                                       [1]                              [2]                              [3]                              [4]
                                                       [2]                              [3]                              [4]                              [0]
                                                      
                                                       
= [3,8,13,13]
如果按照实际意义,就是取有重合的情况
 对卷积(convolution)的理解 - oliverPP

对卷积(convolution)的理解 - oliverPP

 

 
 
 
 
多维的情况类似,对v和a进行,如下变换
卷积过程先将卷积核v旋转180°,被卷积矩阵a扩展到(m+n)*(m+n)大小,将扩展部分用0代替,其序号用负数代替;