В настоящее время я работаю над переопределением некоторого алгоритма, написанного на 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