虽然我已经找到了关于scipy.ndimage.convolve函数的文档,并且“实际上知道它做了什么”,但是当我试图计算结果数组时,我无法遵循数学公式。让我们举个例子:
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]]) 我希望一步一步地计算。
发布于 2016-06-22 21:39:54
只是为了热身考虑
K=np.array([1,0,0,0,1 0,0,0,0,0])
而不是你的k,如果你
ndimage.convolve(a,k,模式=‘常数’,cval=0.0)
你会得到
array([[4, 2, 4, 0],
[5, 3, 7, 4],
[3, 0, 0, 7],
[9, 3, 0, 0]])请注意,任何元素都是它自己的位置之和(由于第2 1 in k)和下面的1和右边(由于1 in k),即上角的4来自上角原来的1加上从它对角向下的3对角。
(可能)令人困惑的部分是,k的效果与您可能预期的相反(对于k以上,您可能期望前1将值添加到上面和左边,而不是向下和右边。
现在回到你的: 12 (3下降,2跨)是9+3+0+0+0+0之和。
请注意,矩阵之外的任何内容都假定为0。
https://stackoverflow.com/questions/37969197
复制相似问题