0

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

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

知道我可以用什么???来获得面具吗?

4

1 回答 1

0

如果fill_value数组中没有以其他方式出现,则应该可以:

var.filled()==var.fill_value

掩码数组具有datamask(以及类似的属性fill_value)。是“原始的data”,即与您在创建数组时提供的内容相同。因此,您可以测试 , 的唯一方法mask是直接查看mask,或将掩码应用于数据,这就是这样filled做的。

剥离下来,filled做:

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

它制作 的副本data,用 填充maskedfill

显然,这是一种复杂的获取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

于 2015-12-10T20:28:10.957 回答