我是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)
如果列表大小小于周期,则返回累积总和。
我已经尝试过一些方法。
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来获取结果。有人可以帮忙吗?
非常感谢。