我有 2 个相同长度的双精度数组。数组 a 填充了一些数据,数组 b 将被计算。
数组 b 的每个元素等于数组 a 中的一个对应值加上数组 b 中所有前面元素的加权和。
加权和的计算方法是将所有这些元素相加,每个元素乘以一个系数,该系数等于它与我们计算的当前元素的距离除以前一个子集中的元素数。
为了实现这一点,我循环遍历我计算的每个元素的整个前面的子集。
这可以优化吗?我没有足够的数学技能,但我怀疑我只能使用第一个前面的元素来计算每个下一个元素,因为每个元素都已经从前面的集合中派生出来,并且包含它已经加权的所有信息。也许我可以调整权重公式并获得相同的结果而无需第二级循环?
这似乎是 Scala 中的一个例子(我不确定它是否正确:-])。由于实际项目使用负索引,因此根据上述任务将 a(1) 和 a(2) 视为 a(0) 之前。
import scala.Double.NaN
val a = Array[Double] (8.5, 3.4, 7.1, 5.12, 0.14, 5)
val b = Array[Double] (NaN, NaN, NaN, NaN, NaN, 5)
var i = b.length - 2
while (i >= 0) {
b(i) = a(i) + {
var succession = 0.0
var j = 1
while (i + j < b.length) {
succession += b (i+j) * (1.0-j.toDouble/(b.length - i))
j += 1
}
succession
}
i -= 1
}
b.foreach((n : Double) => println(n))