2016-03-16 14 views
4

有一個numpy.testing包用於比較numpy的陣列,但似乎沒有成爲掩蔽陣列的等效。那裏有圖書館嗎?是否有確實陣列等效於numpy.ma庫?

我注意到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

'numpy.testing'不用於比較numpy的陣列;所有與比較相關的方法都有一個完全不適合通用數組比較的斷言方法。 – user2357112

+0

你要什麼比較語義,反正?顯然,你需要平等的面具。你想要相等的fillvalues?完全相同的元素,還是達到容差?相同的dtypes?相同的內存佈局?如果一個單元格在兩個被遮罩的數組中都被遮罩,那麼數據數組中的遮罩值是否很重要? – user2357112

回答

1

ma.masked_array.__eq__實際上是在numpy的實現,但也許它沒有你要找的語義?你可以得到的文檔以help(ma.masked_array.__eq__)用Python解釋器,它指出:

檢查等是否等於自我的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()) 

如果你wa NT到檢查所有有效字段相等的你可以使用:

np.alltrue((a==b).compressed()) 

由於user2357112在註釋中解釋,numpy.testing對numpy的陣列,這可能不是你所期待的單元測試提供的功能。這是,你仍然可以使用常規assert功能與我提供的例子。