[英]Best way to assert for numpy.array equality?
我想為我的應用程序進行一些單元測試,我需要比較兩個數組。 由於array.__eq__
返回一個新數組(因此TestCase.assertEqual
失敗),斷言相等的最佳方法是什么?
目前我正在使用
self.assertTrue((arr1 == arr2).all())
但我真的不喜歡它
檢查numpy.testing
的斷言函數,例如
assert_array_equal
對於浮點數組相等性測試可能會失敗並且assert_almost_equal
更可靠。
更新
幾個版本之前 numpy 獲得了assert_allclose
,它現在是我最喜歡的,因為它允許我們指定絕對和相對誤差,並且不需要小數四舍五入作為接近度標准。
我認為(arr1 == arr2).all()
看起來很不錯。 但你可以使用:
numpy.allclose(arr1, arr2)
但並不完全相同。
與您的示例幾乎相同的替代方法是:
numpy.alltrue(arr1 == arr2)
注意 scipy.array 實際上是一個引用 numpy.array。 這樣可以更輕松地找到文檔。
我發現使用self.assertEqual(arr1.tolist(), arr2.tolist())
是將數組與 unittest 進行比較的最簡單方法。
我同意這不是最漂亮的解決方案,它可能不是最快的,但它可能與您的其余測試用例更加統一,您將獲得所有單元測試錯誤描述,並且實現起來非常簡單。
從 Python 3.2 開始,您可以使用assertSequenceEqual(array1.tolist(), array2.tolist())
。
這具有向您顯示數組不同的確切項目的附加價值。
在我的測試中,我使用這個:
numpy.testing.assert_array_equal(arr1, arr2)
self.assertTrue(np.array_equal(x, y, equal_nan=True))
equal_nan = True
如果你想np.nan == np.nan
返回True
或者您可以使用numpy.allclose與 torelance 進行比較。
np.linalg.norm(arr1 - arr2) < 1e-6
使用 numpy
numpy.array_equal(a, b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.