list - Scala:使用固定窗口计算列表的移动总和

标签 list scala sum rolling-sum

我是 Scala 的新手,我想用列表的固定窗口计算移动总和。

例如:给定列表值 (1.0, 2.0, 3.0, 6.0, 7.0, 8.0, 12.0, 9.0, 4.0, 1.0) 和周期 4,函数应该返回:
(1.0, 3.0, 6.0, 12.0, 18.0, 24.0, 33.0, 36.0, 33.0, 26.0)

如果 list.size < period 则只返回累积总和。

我做了一些尝试

def mavg(values: List[Double], period: Int): List[Double] = {
  if (values.size <= period) (values.sum ) :: List.fill(period -1)(values.sum ) else {
      val rest: List[Double] = mavg(values.tail, period)
      (rest.head + ((values.head - values(period)))):: rest
  }
}

然而,我得到了
List(12.0, 18.0, 24.0, 33.0, 36.0, 33.0, 26.0, 26.0, 26.0, 26.0

这是不正确的。我不想使用 Pyspark 来获得结果。有人可以帮忙吗?

非常感谢。

最佳答案

  def mavg(values: Seq[Double], period: Int): Seq[Double] = {
    (Seq.fill(math.min(period - 1, values.length))(0.0) ++ values) // padding zeros
      .sliding(period)                  
      .map(_.sum)
      .toSeq
  }

关于list - Scala:使用固定窗口计算列表的移动总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512358/

相关文章:

scala - 为什么 val 是稳定标识符而 def 不是?

scala - 在 Play 2.1 中,使用什么代替已弃用的 PushEnumerator

r - 如何将 [i] 的每个元素的 j=1 相加到 (i-1)(文章中的输入公式)

mysql - 如何内连接2个表并对第三个表求和

Python内存消耗: dict VS list of tuples

c# - 将数组的一部分添加到列表的内存有效方法

json - 使用 Play 2.4 中其他属性的依赖关系验证 json 属性

python - 在不涉及元组的情况下将两个列表变成 1

python - Python 中要列出的字典

所有 double 的Java总和不返回预期结果