【问题标题】:python numpy std vs scala breeze stddevpython numpy std vs scala 微风 stddev
【发布时间】:2019-03-06 20:42:54
【问题描述】:

我目前正在将一些 python 代码迁移到 scala。我正在使用微风库作为 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 的行为。此处提供示例代码:Scala: What is the generic way to calculate standard deviation

但我正在寻找一种轻而易举的方法。有什么想法吗?

【问题讨论】:

    标签: python scala scala-breeze


    【解决方案1】:

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

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

    样本标准是什么。借助微风,您可以做一些事情来获得人口标准

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

    【讨论】:

    • 感谢您的解释。我在微风 GitHub 页面中发现了相关问题:github.com/scalanlp/breeze/issues/507
    • @Normal 这可能是您所知道的,但请参阅我关于如何处理此问题的更新。
    【解决方案2】:

    如果keepAlive的解决方案不起作用,您应该将“n”更改为Double

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2013-01-30
      • 2018-08-16
      相关资源
      最近更新 更多