Python 是否有为numpy.ma提供数组等效性的库?
有一个用于比较numpy数组的numpy.testing包,但对于屏蔽数组似乎没有等效的包。有没有一个图书馆已经这样做了 我注意到numpy.ma本身有一些比较函数,比如numpy.ma.allequal,但是这个函数似乎不能检查两个数组掩码是否相同。例如-Python 是否有为numpy.ma提供数组等效性的库?,python,numpy,masking,Python,Numpy,Masking,有一个用于比较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,Fa
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
ma.masked\u array.\uuuuu eq\uuuu
实际上是在numpy中实现的,但它可能没有您想要的语义?您可以使用帮助(ma.masked\u array.\uuu eq\uu)
和python解释器访问文档,其中说明:
检查其他元素是否等于自身元素
这就是我在您的示例中看到的:它在数据标记为有效的位置进行比较,并在屏蔽数组的数据字段中返回结果。如果数据无效(对于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.alltrue((a==b).compressed())
np.allfalse((a==b.data)
编辑:事实上,我认为你需要:
not np.any((a==b).mask) and np.alltrue((a==b).compressed())
如果要检查所有有效字段是否相等,可以使用:
np.alltrue((a==b).compressed())
正如user2357112在评论中解释的那样,
numpy.testing
提供了在numpy阵列上进行单元测试的功能,而这可能不是您想要的。确实如此,您仍然可以使用常规的assert
函数和我提供的示例。numpy。测试不是为了比较numpy数组;与比较相关的所有内容都有一个断言方法,它完全不适合于通用数组比较。您到底想要什么比较语义?显然,你想要的是同样的面具。你想要相等的填充值吗?完全相等的元素,还是达到公差?相同的数据类型?相同的内存布局?如果一个单元格在两个屏蔽数组中都被屏蔽,那么数据数组中的屏蔽值是否重要?