np.isclose для сверки измерений: выберите масштаб допуска
Две системы считают один показатель с небольшим расхождением округления. Для сверки выбрали np.isclose и настройки по умолчанию. На крупных значениях различие принимается, а возле нуля почти любое маленькое число тоже считается совпадением. Без единиц измерения такой результат трудно объяснить.
isclose сравнивает абсолютное различие с суммой абсолютного допуска и относительного допуска, умноженного на модуль второго аргумента. Второй аргумент играет роль эталона. Поэтому перестановка аргументов в общем случае способна изменить ответ.
Как изменить решение
import numpy as np
assert bool(np.isclose(10., 11., rtol=.095, atol=0))
assert not bool(np.isclose(11., 10., rtol=.095, atol=0))
actual = np.array([0.004, 100.004, np.nan])
expected = np.array([0., 100., np.nan])
same = np.isclose(actual, expected, rtol=0, atol=.005, equal_nan=True)
assert same.tolist() == [True, True, True]
print(same)В первом сравнении допуск равен 1.045, во втором — 0.95, поэтому разность 1 проходит только в одном направлении. Для второго набора мы явно выбрали абсолютный допуск 0.005 и отключили относительный: правило одинаково для нуля и ста.
Определите допустимое расхождение в единицах показателя. Для датчика оно может зависеть от диапазона; для денежных сумм лучше выбрать точное представление в минимальных единицах или decimal-арифметику. isclose не заменяет правило округления финансового документа.
Что проверить на своих данных
После установки NumPy проверьте значения чуть ниже и чуть выше границы допуска, а также ноль, NaN и бесконечность. equal_nan=True полезен только тогда, когда два отсутствующих измерения действительно считаются совпадением в вашей сверке. Если пропуск означает ошибку источника, его нужно вывести отдельно.
Для отчёта сохраняйте величину отклонения вместе с маской совпадения. Одно булево поле скрывает, насколько результат близок к границе и в какую сторону смещён. Если эталонной системы нет, сформулируйте симметричное правило отдельно, например через максимум модулей двух значений, и проверьте его на тех же парах. Выбор функции должен следовать определению допуска, а не определять его задним числом.
Практика дальше
Допуск сверки должен стать частью проверки результата расчёта. В тренажёре «NumPy и pandas» вы решаете задачи с массивами и таблицами, а в финале собираете клиентский отчёт и проверяете ошибки объединения. Всего в программе 124 задачи с кодом и автоматической проверкой.
Посмотреть программу и практику курса
Источник: np.isclose для сверки измерений — официальная документация.
Другие задачи по теме: Календарь, пропуски и точность вычислений.
Продолжить на практике
- NumPy и pandas: практический тренажёр ↗
Бесплатный тренажёр NumPy и pandas для тех, кто знает основы Python. Научитесь очищать таблицы, объединять данные и собирать отчёты: 31 урок и 124 задачи с кодом и автоматической проверкой.
