是否有一个库可以对 numpy.ma 进行数组等效?

use*_*701 5 python numpy masking

有一个 numpy.testing 包用于比较 numpy 数组,但似乎没有等效的掩码数组。那里有图书馆已经这样做了吗?

我注意到 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
Run Code Online (Sandbox Code Playgroud)

Emi*_*ien 1

ma.masked_array.__eq__实际上是在 numpy 中实现的,但也许它没有您正在寻找的语义?help(ma.masked_array.__eq__)您可以使用 python 解释器访问文档,它指出:

检查 other 是否等于 self 元素

这就是我在您的示例中看到的:它在数据被标记为有效的情况下进行比较,并在屏蔽数组的数据字段中返回结果。只要数据无效(对于 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)
Run Code Online (Sandbox Code Playgroud)

如果您想检查所有字段是否有效且相等,您可以使用:

np.allfalse((a==b).data)

编辑:实际上,我认为你需要:

not np.any((a==b).mask) and np.alltrue((a==b).compressed())
Run Code Online (Sandbox Code Playgroud)

如果您想检查所有有效字段是否相等,您可以使用:

np.alltrue((a==b).compressed())
Run Code Online (Sandbox Code Playgroud)

正如 user2357112 在评论中所解释的,numpy.testing提供了对 numpy 数组进行单元测试的函数,这可能不是您想要的。确实如此,您仍然可以将常规assert函数与我提供的示例一起使用。