Python Numpy:创建遮罩阵列以选择矩形

Python Numpy:创建遮罩阵列以选择矩形,python,arrays,numpy,indexing,mask,Python,Arrays,Numpy,Indexing,Mask,有没有一种方法可以生成一个数组,屏蔽一个矩形区域,而不需要先初始化一个空数组 mask = np.zeros((10,10), dtype=bool) mask[10/2:,10/2:] = True 我正在寻找一个numpy表达式,它将替换这两行,并生成可以在一行中完成的mask: mask = np.fromfunction(lambda i, j: (i >= 5) * (j >= 5), (10, 10), dtype=int) 但这比最初的实现慢了很多。(它创建两个包含

有没有一种方法可以生成一个数组,屏蔽一个矩形区域,而不需要先初始化一个空数组

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

我正在寻找一个numpy表达式,它将替换这两行,并生成可以在一行中完成的
mask

mask = np.fromfunction(lambda i, j: (i >= 5) * (j >= 5), (10, 10), dtype=int)
但这比最初的实现慢了很多。(它创建两个包含行和列索引的数组)


如果不想初始化数组并手动设置值,可以使用
np.empty
。但是,在这种特定情况下,最好使用
np.zero
np.ones
并翻转需要更新的最小条目数的值。

如果您真的真的想要一行,这是一种可能的方法。但我要说的是,您的原始代码更干净、更清晰,而且总体上更好

>>> 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)