我正在尝试使用Scala中的自回归公式建立时间序列。该方程式查找目标数组的先前索引和其他两个数组的当前索引。虚拟方程式示例:
z_i = z[i-1] - x[i] + y[i]
它以命令式风格很简单(请参见下面的C ++示例),但是我试图弄清楚Scala中的惯用方式。我创建了一个带有while
循环的解决方案,但它感觉笨拙且缺乏伸缩性。
#include <vector>
#include <iostream>
int main() {
std::vector<int> x {1, 2, 3, 4};
std::vector<int> y {10, 9, 8, 7};
std::vector<int> z {0, 0, 0, 0};
for(int i = 1; i < x.size(); i++) {
z[i] = z[i-1] - x[i] + y[i];
}
for(auto i: z) {
std::cout << i << std::endl;
}
}
// Desired result
[0, 7, 12, 15]
答案 0 :(得分:2)
您将希望从z
和x
来构建它,而不是修改现有的y
。
val x = Vector(1, 2, 3, 4)
val y = Vector(10, 9, 8, 7)
val z = (x.tail zip y.tail).scanLeft(0){case (nz,(nx,ny)) => nz - nx + ny}
//z: Vector[Int] = Vector(0, 7, 12, 15)