Numpy:创建选择矩形的掩码数组

2 投票
2 回答
4596 浏览
提问于 2025-04-18 02:59

有没有办法生成一个数组,同时遮住一个矩形区域,而不需要先初始化一个空数组呢?

mask = np.zeros((10,10), dtype=bool)
mask[10/2:,10/2:] = True

我在寻找一个numpy的表达式,可以替代这两行代码,直接生成mask

2 个回答

1

这可以用一行代码来完成:

mask = np.fromfunction(lambda i, j: (i >= 5) * (j >= 5), (10, 10), dtype=int)

不过,这样做的速度比原来的方法慢很多。(因为它创建了两个数组来保存行和列的索引)。

如果你不想初始化数组并手动设置值,可以使用 np.empty。不过在这个特定的情况下,使用 np.zerosnp.ones 可能更好,然后再根据你需要更新的最小条目数来翻转这些值。

2

如果你真的非常想要用一行代码来实现,这里有一种可能的方法。不过我觉得你最开始的代码更干净、更清晰,总体上也更好...

>>> np.logical_and.outer(np.arange(10) >= 5, np.arange(6) >= 3)
array([[False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False],
       [False, False, False,  True,  True,  True],
       [False, False, False,  True,  True,  True],
       [False, False, False,  True,  True,  True],
       [False, False, False,  True,  True,  True],
       [False, False, False,  True,  True,  True]], dtype=bool)

撰写回答