Numpy:创建一个掩码数组来选择矩形

时间:2014-04-16 15:11:04

标签: python arrays numpy indexing mask

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

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

我正在寻找一个可以替换这两行并生成mask

的numpy表达式

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

可以在一行中完成:

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

但事实证明这比原始实现要慢一些。 (它创建了两个包含行索引和列索引的数组。)

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