使用逻辑表达式从numpy蒙板数组中提取蒙版

时间:2015-12-10 20:21:39

标签: python numpy no-data

我试图找到一种方法,仅使用逻辑表达式从掩码数组中获取掩码。因此,如果var是一个蒙面数组,我想通过将它与一个nodata对象,无或类似的东西进行比较来获得掩码

>>> var = numpy.ma.masked_array([1, 2 , 3], mask=[True, False, True])
>>> print var == None
... False
>>> print var == numpy.ma.masked
... --

我想得到什么

>>> print var == ???
... array([ True, False,  True], dtype=bool)

我知道我可以通过var.mask直接访问掩码,但在我的用例中,我只能评估逻辑运算符,例如numpy.equal

知道我可以用???来获取面具吗?

1 个答案:

答案 0 :(得分:0)

如果数组中没有fill_value,则应该可以:

var.filled()==var.fill_value

屏蔽数组包含datamask(以及fill_value等属性)。 data是' raw',与您在创建阵列时提供的内容保持不变。因此,您可以测试mask的唯一方法是直接查看mask,或将掩码应用于数据,这是filled所做的。

剥离,filled确实:

m = self._mask
result = self._data.copy('K')
np.copyto(result, fill_value, where=m)

它会复制data,并使用masked填充fill值。

显然,这是一种获取mask的复杂方式。但如果你不能直接获取面具,你可以做这样的事情。

您可以使用自己的fill_valuemasked .__eq__执行类似的操作(将两边填充为0并执行正常__eq__

In [416]: var.filled(0)==0
Out[416]: array([ True, False,  True], dtype=bool)

浏览ma定义代码以获取更多详细信息: /usr/lib/python3/dist-packages/numpy/ma/core.py