卷积是主要用于信号处理的数学运算符。Numpy只是使用此信号处理术语来定义它,因此引用了“信号”。numpy中的数组是一个信号。将两个信号的卷积定义为第一信号的积分,将其反转,在第二个信号上扫过(“卷积到”上)并在重叠矢量的每个位置乘以(与标量积)。通常将第一个信号称为内核,尤其是当它是图像处理或神经网络中的2-D矩阵,并且反转成为2-D的镜像时(不转置)。使用Wikipedia上的动画可以更清楚地理解它。
卷积根据上下文具有多种定义。有些在重叠开始时开始卷积,而另一些在重叠只是部分时开始卷积。如果是numpy的“有效”模式,则将重叠指定为始终完整。之所以称为“有效”,是因为结果中给出的每个值都无需数据外推即可完成。
例如,如果数组X的长度为2,数组Y的长度为4,则在“有效”模式下X到Y的卷积将得到长度为3的数组。
第一步,针对X = [4 3]
和Y = [1 1 5 5]
:
[3 4] (X is reversed from [4 3] to [3 4], see note)
[1 1 5 5]
= 3 * 1 + 4 * 1 = 7
注意:如果没有反转X,则该运算将称为互相关而不是卷积。
第二步:
[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23
第三步:
[3 4]
[1 1 5 5]
= 3 * 5 + 4 * 5 = 35
模式“有效”的卷积结果将是[7 23 35]。
如果将重叠指定为一个数据点(例如在“ full”模式下的情况),则结果将为您提供长度为5的数组。第一步是:
[3 4]
[1 1 5 5]
= 3 * undefined (extrapolated as 0) + 4 * 1 = 4
等等。存在更多的外推模式。