Функция isclose
Функция isclose выполняет поэлементное сравнение двух массивов на приближённое равенство.
Она возвращает логический массив, указывающий, какие элементы находятся достаточно близко друг к другу
с учётом заданных допусков. Функция особенно полезна при работе с числами с плавающей точкой,
где точное сравнение может давать ложные результаты из-за ошибок округления.
Первым и вторым параметрами передаются сравниваемые массивы.
Третьим параметром rtol задаётся относительный допуск (по умолчанию 1e-05),
четвёртым параметром atol задаётся абсолютный допуск (по умолчанию 1e-08).
Пятым параметром equal_nan указывается, следует ли считать значения NaN равными (по умолчанию False).
Синтаксис
np.isclose(arr1, arr2, rtol=1e-05, atol=1e-08, equal_nan=False)
Пример
Сравним два числа с плавающей точкой, которые должны быть равны математически, но из-за ошибок округления отличаются:
import numpy as np
res = np.isclose(0.1 + 0.2, 0.3)
print(res)
Результат выполнения кода:
True
Пример
Сравним два массива с поэлементной проверкой на приближённое равенство:
import numpy as np
arr1 = np.array([1.0, 2.0, 3.0, 4.0])
arr2 = np.array([1.0000001, 2.0000002, 3.0000003, 4.0000004])
res = np.isclose(arr1, arr2)
print(res)
Результат выполнения кода:
[ True True True True]
Пример
Продемонстрируем влияние параметра atol на результат сравнения. Увеличим абсолютный допуск, чтобы считать элементы равными при большей разнице:
import numpy as np
arr1 = np.array([1.0, 2.0, 3.0])
arr2 = np.array([1.1, 2.2, 3.3])
res = np.isclose(arr1, arr2, atol=0.3)
print(res)
Результат выполнения кода:
[ True True True]
Пример
Покажем, как работает сравнение с NaN. По умолчанию NaN не равны друг другу, но с параметром equal_nan это можно изменить:
import numpy as np
arr1 = np.array([1.0, np.nan, 3.0])
arr2 = np.array([1.0, np.nan, 3.0])
res_default = np.isclose(arr1, arr2)
res_equal_nan = np.isclose(arr1, arr2, equal_nan=True)
print("Default behavior:", res_default)
print("With equal_nan=True:", res_equal_nan)
Результат выполнения кода:
Default behavior: [ True False True]
With equal_nan=True: [ True True True]
Пример
Используем isclose для фильтрации элементов массива, которые близки к заданному значению:
import numpy as np
arr = np.array([1.0, 1.0001, 2.0, 2.0001, 3.0])
target = 2.0
mask = np.isclose(arr, target, atol=0.001)
res = arr[mask]
print(res)
Результат выполнения кода:
[2. 2.0001]
Смотрите также
-
функцию
allclose,
которая проверяет, все ли элементы двух массивов близки друг к другу -
функцию
equal,
которая выполняет поэлементное сравнение массивов на точное равенство -
функцию
array_equal,
которая проверяет полное равенство двух массивов -
функцию
array_equiv,
которая проверяет эквивалентность формы и элементов массивов