Python Numpy STD против Scala Breeze STDDEV - PullRequest
0 голосов
/ 17 октября 2018

В настоящее время я работаю над переносом некоторого кода Python в Scala.Я использую breeze lib в качестве замены для numpy.

Все выглядит хорошо, но я столкнулся с другим поведением при выводе реализаций стандартного отклонения:

Python:

series = np.array([1,4,5])
np.mean(series) // 3.3333333333333335
np.std(series) // 1.699673171197595

Scala:

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

Я знаю, как воспроизвести поведение питона в простой скале.Пример кода представлен здесь: Scala: Каков общий способ вычисления стандартного отклонения

Но я ищу способ получить его с легкостью.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Если решение keepAlive не работает, вы должны изменить «n» на Double

var n : Double  = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948
0 голосов
/ 17 октября 2018

Это связано с числом степеней свободы .Действительно,

>>> np.std(series, ddof=1)
2.081665999466133

Который является образцом станд.С ветерком, что вы можете сделать, чтобы получить стандартную численность населения является

var n   = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948
...