我试图找到一种方法,仅使用逻辑表达式从掩码数组中获取掩码。因此,如果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
。
知道我可以用???
来获取面具吗?
答案 0 :(得分:0)
如果数组中没有fill_value
,则应该可以:
var.filled()==var.fill_value
屏蔽数组包含data
和mask
(以及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_value
。 masked
.__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