numpy.allclose#
- numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)[source]#
若兩個陣列在容 tolerance 範圍內逐元素相等,則回傳 True。
容 tolerance 值為正數,通常是非常小的數字。相對差異 (rtol * abs(b)) 和絕對差異 atol 會加總在一起,以便與 a 和 b 之間的絕對差異進行比較。
警告
預設的 atol 不適用於比較量級遠小於 1 的數字 (請參閱「注意事項」)。
如果 NaN 位於相同位置且
equal_nan=True
,則 NaN 會被視為相等。如果 Inf 位於相同位置且在兩個陣列中符號相同,則 Inf 會被視為相等。- 參數:
- a, b類陣列
要比較的輸入陣列。
- rtol類陣列
相對容 tolerance 參數 (請參閱「注意事項」)。
- atol類陣列
絕對容 tolerance 參數 (請參閱「注意事項」)。
- equal_nan布林值
是否將 NaN 視為相等進行比較。若為 True,則輸出陣列中 a 中的 NaN 會被視為等於 b 中的 NaN。
- 回傳值:
- allclose布林值
若兩個陣列在給定容 tolerance 範圍內相等,則回傳 True;否則回傳 False。
注意事項
如果以下方程式逐元素為 True,則 allclose 會回傳 True。
absolute(a - b) <= (atol + rtol * absolute(b))
上述方程式在 a 和 b 中不對稱,因此在少數情況下,
allclose(a, b)
可能與allclose(b, a)
不同。當參考值 b 的量級小於 1 時,atol 的預設值並不適用。例如,
a = 1e-9
和b = 2e-9
不太可能被視為「接近」,但使用預設設定時,allclose(1e-9, 2e-9)
為True
。請務必根據手邊的使用案例選擇 atol,特別是針對定義閾值,低於該閾值時,a 中的非零值將被視為「接近」b 中的極小值或零值。a 和 b 的比較使用標準廣播,這表示 a 和 b 不需具有相同的形狀,
allclose(a, b)
才能評估為 True。equal
也是如此,但array_equal
則否。allclose
未針對非數值資料型別定義。bool
基於此目的被視為數值資料型別。範例
>>> import numpy as np >>> np.allclose([1e10,1e-7], [1.00001e10,1e-8]) False
>>> np.allclose([1e10,1e-8], [1.00001e10,1e-9]) True
>>> np.allclose([1e10,1e-8], [1.0001e10,1e-9]) False
>>> np.allclose([1.0, np.nan], [1.0, np.nan]) False
>>> np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True) True