python numpy std 与 scala breeze stddev

python numpy std vs scala breeze stddev

我目前正在努力将一些 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

我知道如何在普通 scala 中重现 python 的行为。此处提供示例代码:

但我正在寻找一种轻松获得它的方法。有什么想法吗?

这与degrees of freedom的数量有关。的确,

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

这是样本标准。使用 breeze,你可以做一些事情来获得人口标准是

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

如果keepAlive的方案不行,你应该把"n"改成Double

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