Python scipy.ndimage.convalve背后的数学
虽然我已经找到了关于scipy.ndimage.convalve函数的文档,而且我“实际上知道它的作用”,但当我试图计算结果数组时,我无法遵循数学公式。让我们举个例子:Python scipy.ndimage.convalve背后的数学,python,scipy,Python,Scipy,虽然我已经找到了关于scipy.ndimage.convalve函数的文档,而且我“实际上知道它的作用”,但当我试图计算结果数组时,我无法遵循数学公式。让我们举个例子: a = np.array([[1, 2, 0, 0],` [5, 3, 0, 4], [0, 0, 0, 7], [9, 3, 0, 0]]) k = np.array([[1,1,1],[1,1,0],[1,0,0]]) from scipy i
a = np.array([[1, 2, 0, 0],`
[5, 3, 0, 4],
[0, 0, 0, 7],
[9, 3, 0, 0]])
k = np.array([[1,1,1],[1,1,0],[1,0,0]])
from scipy import ndimage
ndimage.convolve(a, k, mode='constant', cval=0.0)
# Why is the result like this ?
array([[11, 10, 7, 4],
[10, 3, 11, 11],
[15, 12, 14, 7],
[12, 3, 7, 0]])
我想一步一步的计算。 < P>只是热身考虑 k=np.数组([[1,0,0],[0,1,0],[0,0,0]] 而不是你的k,那么如果你 ndimage.convolve(a,k,mode='constant',cval=0.0) 你得到
array([[4, 2, 4, 0],
[5, 3, 7, 4],
[3, 0, 0, 7],
[9, 3, 0, 0]])
请注意,任何元素都是其自身位置(由于k中的第二个1)与下方和右侧的位置(由于k中的第一个1)的总和,即上角的4是从上角的原始1加上从其对角向下的3
(可能)令人困惑的是,k的效果与您可能期望的相反,即对于上面的k,您可能期望第一个1将值添加到上方和左侧,而不是向下和右侧
现在回到你的:12(3向下,2横向)是9+3+0+0+0+0的和
请注意,矩阵之外的任何内容都假定为0。有关NDImage.convalve的详细信息 尽管我知道基本的np.convalve,但我还是无意中发现了这个NDImage卷积,而且文档也不是那么自解释的,所以我努力仔细阅读并补充了前面的解释性文章: A.基础知识: 参考:如果你对卷积的概念没有很好的基础,请参考以下内容 ,
您将再次得到相同的10(第一行:1*2+,第二行1*3+1*4),依此类推我非常感谢您的解释。我终于明白了这些值是如何计算的/