[英]How to I calculate a “maximum mask” for a 2d array with numpy
我试图找到二维数组中每个 2x2 块中最大值的掩码(用于 CNN 中的最大池反向传播)。
例子
[[ 0 1 4 0]
[ 4 2 3 3]
[ 2 0 3 2]
[ 0 1 5 1]]
需要变成:
[[ 0 0 1 0]
[ 1 0 0 0]
[ 1 0 0 0]
[ 0 0 1 0]]
第一个数组左上角的 2x2 块是 0 1, 4 2。最大值是 4,所以它被 1 替换,非最大值全部被 0 替换。这是对每个 2x2 块完成的没有重叠。
试图:
我试过使用np.argmax
但我只能使用一个 integer 作为轴参数,这与np.max
不同。 我也试图想办法用索引来做到这一点,但在 numpy 方面我绝不是专业人士,所以我没有走得太远。
非常感谢任何帮助或建议,谢谢。
如果你可以使用skimage
:
>>> from skimage.util import view_as_blocks
>>> a = np.array([[0,1,4,0],[4,2,3,3],[2,0,3,2],[0,1,5,1]])
>>> ab = view_as_blocks(a, (2, 2))
>>> abm = np.max(ab, axis=(2, 3), keepdims=True) == ab
>>> abm.astype(np.int32).reshape(a.shape)
array([[0, 0, 1, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 1, 0]], dtype=int32)
请注意,如果在 (2, 2) 块中有两个(或更多)元素等于该块中的最大值,则它们都被标记为 1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.