В настоящее время я работаю над реализацией некоторого алгоритма, написанного на Java на Python.Один шаг - вычислить стандартное отклонение списка значений.Исходная реализация использует для этого DescriptiveStatistics.getStandardDeviation
из библиотеки Apache Math 1.1.Я использую стандартное отклонение NumPy 1,5.Проблема в том, что они дают (очень) разные результаты для одного и того же ввода.У меня есть следующий пример:
[0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]
Я получаю следующие результаты:
numpy : 0.10932134388775223
Apache Math 1.1 : 0.12620366805397404
Wolfram Alpha : 0.12620366805397404
Я проверил с помощью Wolfram Alpha , чтобы получить третье мнение.Я не думаю, что такую разницу можно объяснить только точностью.Кто-нибудь знает, почему это происходит, и что я мог с этим поделать?
Редактировать : Расчет вручную в Python дает тот же результат:
>>> from math import sqrt
>>> v = [0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]
>>> mu = sum(v) / 4
>>> sqrt(sum([(x - mu)**2 for x in v]) / 4)
0.10932134388775223
Кроме того, о том, как не использовать это правильно:
>>> from numpy import std
>>> std([0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842])
0.10932134388775223