如何计算滑动窗口内的加权和,权重和可能为 0

我想对一个序列 X_i,计算 moving sum,计算形如下述的式子 Y_i = X_i + 2*X_(i-1) + 3 * X_(i-2) + 4 * X_(i-3), 其中 [1, 2, 3, 4] 是输入的权重,可能会发生改变。

我做出了以下尝试:

(1)使用 mwsum,但是该函数要求权重向量和数据向量等长,而我只提供与窗口等长的权重。

(2)使用 mavg,由于部分场景下,权重和可能为 0, 因此会出现 NaN 的结果。

请问我该如何才能正确计算,且不会出现无效值。

请先 登录 后评论

2 个回答

saki

如果只是4个数的加权和,可以写为 x + 2 * move(x,1) + 3 * move(x,2) + 4 * move(x,3)

请先 登录 后评论
OliviaH

如果权重之和等于0的话,函数化的加权平均方法都难以支持,可以使用脚本方式自行相乘,因为函数方法默认加权平均权重和为1(跟加权平均定义保持一致)

为了实现同样的效果,可以使用move方法直接乘以权重向量,注意权重向量和move移动值并非一一对应,而是反着来的。

参考脚本如下:

// 生成数据
x = rand(100,10)
// 生成权重向量,和为0
v = 0.1 0.2 -0.3 0.0
// 计算滚动窗口加权和
y = v[0]*move(x,3)  +  v[1]*move(x,2) + v[2]*move(x,1) + v[3]*x


请先 登录 后评论