Функция testing.assert_allclose
Функция testing.assert_allclose проверяет,
что два массива равны с заданной точностью.
Она особенно полезна при тестировании численных алгоритмов,
где из-за округлений значения могут не совпадать в точности.
Функция принимает два массива для сравнения,
а также параметры допустимой абсолютной и относительной погрешности.
Синтаксис
np.testing.assert_allclose(
actual,
desired,
rtol=1e-07,
atol=0,
equal_nan=False,
err_msg='',
verbose=True
)
Пример
Давайте сравним два массива с плавающей точкой, которые должны быть равны с учётом погрешности:
import numpy as np
arr1 = np.array([1.0, 2.0, 3.0])
arr2 = np.array([1.0000001, 2.0000001, 3.0000001])
np.testing.assert_allclose(arr1, arr2)
print("Arrays are close")
Результат выполнения кода:
"Arrays are close"
Пример
Теперь сравним массивы с более строгими допусками, чтобы показать возникновение ошибки:
import numpy as np
arr1 = np.array([1.0, 2.0, 3.0])
arr2 = np.array([1.0001, 2.0001, 3.0001])
try:
np.testing.assert_allclose(
arr1,
arr2,
rtol=1e-05,
atol=1e-06
)
print("Arrays are close")
except AssertionError as e:
print("AssertionError caught")
Результат выполнения кода:
"AssertionError caught"
Пример
Сравним двумерные массивы, указав только абсолютный допуск без учёта относительной погрешности:
import numpy as np
arr1 = np.array([[1.5, 2.5], [3.5, 4.5]])
arr2 = np.array([[1.5001, 2.5001], [3.5001, 4.5001]])
np.testing.assert_allclose(
arr1,
arr2,
rtol=0,
atol=1e-03
)
print("Arrays are close with absolute tolerance")
Результат выполнения кода:
"Arrays are close with absolute tolerance"
Пример
Рассмотрим случай с элементами NaN. По умолчанию сравнение NaN не даёт совпадения, но можно включить специальный флаг:
import numpy as np
arr1 = np.array([1.0, np.nan, 3.0])
arr2 = np.array([1.0, np.nan, 3.0])
# Without equal_nan raises error
try:
np.testing.assert_allclose(arr1, arr2, equal_nan=False)
print("No error")
except AssertionError as e:
print("AssertionError without equal_nan")
# With equal_nan passes
np.testing.assert_allclose(arr1, arr2, equal_nan=True)
print("Arrays with NaN are close")
Результат выполнения кода:
"AssertionError without equal_nan"
"Arrays with NaN are close"
Пример
Сравним массивы разных типов данных. Функция автоматически приводит их к общему типу:
import numpy as np
arr1 = np.array([1, 2, 3], dtype=np.int32)
arr2 = np.array([1.0000001, 2.0000001, 3.0000001], dtype=np.float64)
np.testing.assert_allclose(arr1, arr2)
print("Integer and float arrays are close")
Результат выполнения кода:
"Integer and float arrays are close"
Смотрите также
-
функцию
assert_array_equal,
которая проверяет точное равенство массивов -
функцию
assert_array_almost_equal,
которая проверяет равенство с заданной точностью для вещественных чисел -
функцию
assert_equal,
которая проверяет равенство любых объектов -
функцию
assert_raises,
которая проверяет, что код вызывает ожидаемое исключение