繁体   English   中英

如何使用 numpy 计算二维数组的“最大掩码”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM