【发布时间】:2020-08-14 03:57:14
【问题描述】:
我是 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
我做了一些尝试
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 来获得结果。有人可以帮忙吗?
非常感谢。
【问题讨论】:
-
试试
sliding方法 -
我注意到窗口增长了(第一个元素、第一个 2 个元素、第一个 3 个元素等),但它没有缩小(最后 4 个元素、最后 3 个元素、最后 2 个元素等)。 )。这是故意的吗?
标签: list scala sum rolling-sum