卷积是主要用于信号处理的数学运算符。 Numpy 只是使用此信号处理术语来定义它,因此使用“信号”引用。 numpy 中的数组是一个信号。两个信号的卷积定义为第一个信号的积分,reversed,扫描(“卷积”)第二个信号并在重叠向量的每个位置相乘(与标量积)。第一个信号通常称为kernel,特别是当它是一个二维矩阵时图像处理 http://web.pdx.edu/~jduh/courses/Archive/geog481w07/Students/Ludwig_ImageConvolution.pdf或神经网络,以及reversal成为一个二维镜像 http://juanreyero.com/article/python/python-convolution.html(不转置)。使用它可以更清楚地理解维基百科上的动画 https://en.wikipedia.org/wiki/Convolution.
根据上下文,卷积有多种定义。有些在重叠开始时开始卷积,而另一些则在仅部分重叠时开始卷积。在 numpy 的“有效”模式下,重叠被指定为始终完整。它被称为“有效”,因为结果中给出的每个值都是在没有数据外推的情况下完成的。
例如,如果数组 X 的长度为 2,数组 Y 的长度为 4,则在“有效”模式下 X 到 Y 的卷积将为您提供长度为 3 的数组。
第一步,对于X = [4 3]
and 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没有反转,该操作将被称为a互相关 https://en.wikipedia.org/wiki/Cross-correlation而不是卷积。
第二步:
[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
等等。存在更多的外推模式。