簡體   English   中英

斷言 numpy.array 相等的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM