【问题标题】:Using logical_and to combine numpy masks使用 logical_and 组合 numpy 掩码
【发布时间】:2018-06-01 23:48:56
【问题描述】:

我看到有人问过类似的问题,但我仍在努力组合面具。

这是我的代码:

final_mask = ma.array(np.logical_and(a.mask, b.mask))

combined_mask=(ma.array(data, mask=final_mask))

data 是我想要放置组合掩码的数组。

当我绘制组合掩码时,它似乎忽略了a.mask,因为它返回的值远高于应有的值。 IE。超过 200 的任何东西以前都被屏蔽了,但在这里返回最多 300。

a.maskb.mask 已经被定义和检查,所以我认为问题在于组合。它们都返回整数而不是我所追求的 true/false 值。

谢谢

【问题讨论】:

    标签: python-2.7 numpy logical-operators masked-array


    【解决方案1】:

    您关于a.mask 是整数等的说法令人困惑。这是组合掩码的简单示例

    In [346]: data = np.arange(12)
    In [347]: a = np.ma.masked_less(data, 7)
    In [348]: b = np.ma.masked_greater(data,2)
    In [349]: mask = np.logical_and(a.mask,b.mask)
    In [350]: np.ma.array(data, mask=mask)
    Out[350]: 
    masked_array(data = [0 1 2 -- -- -- -- 7 8 9 10 11],
                 mask = [False False False  True  True  True  True False False False False False],
           fill_value = 999999)
    

    我最终屏蔽了所有 >2 和 a.mask 是布尔值。

    对于整数,0 为假,其他为真

    In [352]: np.logical_and([0,1,2,3],[3,2,1,0])
    Out[352]: array([False,  True,  True, False], dtype=bool)
    

    【讨论】:

    • 您好,感谢您的建议。根据您所说的,看来我的论点是正确的。这是combined_mask 的输出让我感到困惑,因为它应该屏蔽所有超过100 的值但没有。这是我从组合掩码中得到的数组的一部分: [ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 250 250 250 250 250 250 250 250 250 250 250 46 46 66 81 81 78 250 250 250]
    • 我现在已经解决了这个问题 - 结果我不需要第一行代码。 combine_mask=ma.array(a.mask, mask=b.mask)
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多