Python 被3x3二维卷积的索引搞糊涂了

Python 被3x3二维卷积的索引搞糊涂了,python,numpy,scipy,Python,Numpy,Scipy,我被scipy.ndimage.convalve的过滤器数组索引搞糊涂了 最简单的例子是,Identity按我的预期工作——我得到了相同的矩阵 但我认为一个过滤器就像: 0, 0, 0 0, 0, 1 0, 0, 0 应该给我原始矩阵左移一列,右边缘有零填充 相反,结果是将原始矩阵向右移动,在左列中添加零填充 在另一个维度上的位移也得到了类似的结果。向上似乎向下,向左似乎向右 这让我觉得我对numpy索引(这是很有可能的)或卷积的作用(我认为它是滤波器的每个单元乘以矩阵的相应单元的乘积之和,滤

我被
scipy.ndimage.convalve
的过滤器数组索引搞糊涂了

最简单的例子是,Identity按我的预期工作——我得到了相同的矩阵

但我认为一个过滤器就像:

0, 0, 0
0, 0, 1
0, 0, 0
应该给我原始矩阵左移一列,右边缘有零填充

相反,结果是将原始矩阵向右移动,在左列中添加零填充

在另一个维度上的位移也得到了类似的结果。向上似乎向下,向左似乎向右

这让我觉得我对numpy索引(这是很有可能的)或卷积的作用(我认为它是滤波器的每个单元乘以矩阵的相应单元的乘积之和,滤波器像牛眼一样居中于矩阵的相关单元上)有一些基本的误解


卷积和互相关之间只有一点区别(您对此有点困惑)

给定一个矩阵和一个过滤器:

如果将过滤器按原样乘以(的对应单元格) 矩阵,然后求和,则为互相关

如果将过滤器的镜像(上下)乘以 矩阵的(对应单元格),然后求和,则为 卷积

SciPy与原始定义一致,因此它给出了这样的(正确的)结果(您没有预料到)

当涉及到深度学习/神经网络时,使用的卷积有一个参数
flip\u filters=True
(可能在不同的库中有不同的名称)。所以,在这里(在深度学习中),它们实际上是互相关的


要了解更多信息:,

这是否回答了您的问题?
from scipy import ndimage

a = np.array([[1, 2, 0, 0],
              [5, 3, 7, 4],
              [0, 5, 1, 7],
              [9, 3, 0, 0]])

#k = np.array([[0,0,0],[0,1,0],[0,0,0]])   #identity

#expect: each cell in a' = its right neighbor in a
#actual: each cell in a' = its LEFT neighbor in a
k = np.array([[0,0,0],[0,0,1],[0,0,0]])  

cvo = ndimage.convolve(a, k, mode='constant', cval=0.0)

cvo