Дисперсия Уэлфорда отличается от дисперсии 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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