В настоящее время я работаю над переносом кода Python на scala. Я использую breeze lib вместо numpy.
Все выглядит нормально, но я столкнулся с другим поведением при выводе реализаций стандартного отклонения:
Python:
series = np.array([1,4,5])
np.mean(series) // 3.3333333333333335
np.std(series) // 1.699673171197595
Скала:
val vector = breeze.linalg.Vector[Double](Array(1.0, 4.0, 5.0))
val mean = breeze.stats.mean(vector) // 3.3333333333333335
val std = breeze.stats.stddev(vector) // 2.081665999466133
Я знаю, как воспроизвести поведение Python на простом Scala. Пример кода представлен здесь: Scala: каков общий способ вычисления стандартного отклонения
Но я ищу способ получить это с легкостью. Любые идеи?






Это связано с количеством степени свободы. Действительно,
>>> np.std(series, ddof=1)
2.081665999466133
Это образец std. Что-то, что вы можете сделать, чтобы получить стандартную численность населения,
var n = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948
@Normal Это может быть что-то, что вы знаете, но посмотрите мое обновление о том, как решить эту проблему.
Если решение keepAlive не работает, вам следует изменить "n" на Double
var n : Double = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948
Спасибо за объяснение. Я нашел связанную проблему на странице Breeze GitHub: github.com/scalanlp/breeze/issues/507