Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有为numpy.ma提供数组等效性的库?_Python_Numpy_Masking - Fatal编程技术网

Python 是否有为numpy.ma提供数组等效性的库?

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

有一个用于比较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

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数组;与比较相关的所有内容都有一个断言方法,它完全不适合于通用数组比较。您到底想要什么比较语义?显然,你想要的是同样的面具。你想要相等的填充值吗?完全相等的元素,还是达到公差?相同的数据类型?相同的内存布局?如果一个单元格在两个屏蔽数组中都被屏蔽,那么数据数组中的屏蔽值是否重要?