【问题标题】:Numpy: Create a mask array to select rectangleNumpy:创建一个掩码数组以选择矩形
【发布时间】:2014-05-31 13:26:24
【问题描述】:

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

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

我正在寻找一个 numpy 表达式来替换这两行并生成 mask

【问题讨论】:

    标签: python arrays numpy indexing mask


    【解决方案1】:

    如果您真的非常想拥有一个单线,这是一种可能的方法。但我想说你的原始代码更干净、更清晰、整体更好......

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

    【讨论】:

      【解决方案2】:

      这可以在一行中完成:

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

      但这比原来的实现要慢很多。 (它创建了两个包含行和列索引的数组)。

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

      【讨论】:

        猜你喜欢
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 2015-07-12
        • 1970-01-01
        相关资源
        最近更新 更多