平等测试可能会造成混乱。结果是另一个掩码数组:
In [19]: 0 == m_pt0
Out[19]:
masked_array(data = [False -- False True False False False False],
mask = [False True False False False False False False],
fill_value = True)
掩码数组具有.data
和.mask
属性。 numpy
不知道 MA 的功能只需查看.data
:
In [20]: _.data
Out[20]: array([False, True, False, True, False, False, False, False], dtype=bool)
np.where
看到 2 True
,然后返回
In [23]: np.where(0 == m_pt0)
Out[23]: (array([1, 3], dtype=int32),)
In [24]: np.where((0 == m_pt0).data)
Out[24]: (array([1, 3], dtype=int32),)
在可能的情况下,最好使用np.ma
函数的版本:
In [25]: np.ma.where(0 == m_pt0)
Out[25]: (array([3], dtype=int32),)
查看代码,np.source(np.ma.where)
我看到了
if missing == 2:
return filled(condition, 0).nonzero()
(plus lots of code for the 3 argument use)
这样filled
做:
In [27]: np.ma.filled((0 == m_pt0),0)
Out[27]: array([False, False, False, True, False, False, False, False], dtype=bool)
MA
函数通常用无害的东西(在这种情况下为 0)替换掩码值,或用于compressed
将它们从考虑中删除。
In [36]: m_pt0.compressed()
Out[36]: array([1, 3, 0, 4, 7, 6, 5])
In [37]: m_pt0.filled(100)
Out[37]: array([ 1, 100, 3, 0, 4, 7, 6, 5])
如果将工作委托给数组自己的方法,则 numpy 函数将在 MA 上正常工作。
In [41]: np.nonzero(m_pt0)
Out[41]: (array([0, 2, 4, 5, 6, 7], dtype=int32),)
In [42]: m_pt0.nonzero()
Out[42]: (array([0, 2, 4, 5, 6, 7], dtype=int32),)
In [43]: np.where(m_pt0)
Out[43]: (array([0, 1, 2, 4, 5, 6, 7], dtype=int32),)
np.nonzero
代表。 np.where
才不是。
掩码数组的repr
显示掩码。它只str
显示屏蔽数据:
In [31]: m_pt0
Out[31]:
masked_array(data = [1 -- 3 0 4 7 6 5],
mask = [False True False False False False False False],
fill_value = 999999)
In [32]: str(m_pt0)
Out[32]: '[1 -- 3 0 4 7 6 5]'