编程语言
首页 > 编程语言> > python – 是否有一个库为numpy.ma执行数组等效?

python – 是否有一个库为numpy.ma执行数组等效?

作者:互联网

有一个用于比较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_array .__ eq__实际上是在numpy中实现的,但也许它没有你正在寻找的语义?您可以使用python解释器获取帮助文档(ma.masked_array .__ eq__),它指出:

Check whether other equals self elementwise

根据您的示例,我可以看到以下内容:它将数据标记为有效的比较,并将结果返回到屏蔽数组的数据字段中.无论数据无效(对于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数组进行单元测试的函数,这可能不是你想要的.就是这样,您仍然可以使用我提供的示例使用常规断言函数.

标签:python,numpy,masking
来源: https://codeday.me/bug/20190706/1396200.html