有一个用于比较numpy数组的numpy.testing包,但似乎没有对于屏蔽数组的等价物。那里有一个图书馆吗?
我注意到numpy.ma本身有一些比较函数,比如numpy.ma.allequal,但是这个函数似乎没有检查两个数组掩码是否相同。例如。 -
In [151]: a = ma.masked_array([0,1,2,3],[True,False,False,False])
In [152]: b = ma.masked_array([0,1,2,3],[True,True,False,False])
In [153]: ma.allequal(a,b)
Out[153]: True
答案 0 :(得分:1)
ma.masked_array.__eq__
实际上是在numpy中实现的,但也许它没有你想要的语义?您可以使用python解释器访问带有help(ma.masked_array.__eq__)
的文档,它声明:
检查其他是否等于自元素
在给出您的示例时,我可以看到以下内容:它将数据标记为有效的比较,并将结果返回到屏蔽数组的数据字段中。无论数据无效(对于a或b),都会屏蔽生成的掩码数组字段。
>>> import numpy as np
>>> import numpy.ma as ma
>>> a = ma.masked_array([0,1,2,3],[True,False,False,False])
>>> b = ma.masked_array([0,1,2,3],[True,True,False,False])
>>> a==b
masked_array(data = [-- -- True True],
mask = [ True True False False],
fill_value = True)
>>> b = ma.masked_array([0,1,2,4],[True,True,False,False])
>>> a==b
masked_array(data = [-- -- True False],
mask = [ True True False False],
fill_value = True)
如果您想检查所有字段是否有效且相等,您可以使用:
<击> np.allfalse((A == B)。数据) 击>
编辑:实际上,我认为你需要:
not np.any((a==b).mask) and np.alltrue((a==b).compressed())
如果您想检查所有有效字段是否相等,您可以使用:
np.alltrue((a==b).compressed())
正如user2357112在评论中解释的那样,numpy.testing
提供了对numpy数组进行单元测试的功能,这可能不是你想要的。就是这样,您仍然可以使用常规assert
函数和我提供的示例。