Дисперсия Уэлфорда отличается от дисперсии NumpyPython

Программы на Python
Anonymous
Дисперсия Уэлфорда отличается от дисперсии Numpy

Сообщение Anonymous »

Я хочу использовать метод Уэлфорда для вычисления текущей дисперсии и среднего значения. Я наткнулся на эту реализацию метода Уэлфорда в Python. Однако при тестировании, чтобы еще раз проверить, что он дает тот же результат, что и стандартная реализация Numpy для расчета дисперсии, я обнаружил, что есть разница в выводе.
Выполнение следующего кода (с использованием модуля unittest Python) показывает, что они дают разные результаты (даже после многократного тестирования):

Код: Выделить всё

random_sample = np.random.normal(0, 1, 100)
std = np.var(random_sample, dtype=np.longdouble)
mean = np.mean(random_sample, dtype=np.longdouble)
welford = Welford()
welford.add_all(random_sample)

self.assertAlmostEqual(mean, welford.mean)
self.assertAlmostEqual(var, welford.var_s)

>> AssertionError: 1.1782075496578717837 != 1.1901086360180526 within 7 places (0.011901086360180828804 difference)
Интересно, что существует только разница в дисперсии, а не в среднем значении.
Для моих целей разница в 0,012 достаточно значительна, чтобы ее можно было влияют на мои результаты.
Почему такая разница? Может ли это быть связано с накоплением ошибок с плавающей запятой? Если да, то лучше всего переписать пакет, чтобы использовать класс Decimal?

Подробнее здесь: https://stackoverflow.com/questions/783 ... y-variance

Вернуться в «Python»