的平等的测试可能会造成混淆。其结果是另一个屏蔽数组:
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
的功能不知道马刚看到.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]'
你是从'numpy.ma'子模块,而不是试图'ma.where()'?它会产生不同的结果吗? – blubberdiblub
请显示您的完整代码。在一个例子中,我把所有东西都按预期工作。 –
'[1 - 3 0 4 7 6 5]'不是一个有效的numpy对象。你指的是什么真正的对象? – Kasramvd