使用集合 window 计算 2 个列表的加权移动平均值

Calculating the weighted moving average of 2 lists using a set window

如果我有两个列表:

a:1 2 3 4;
b:10 20 30 40;

我想将两个列表的乘积加到 window 之内,结果集应该是:

10 50 130 250

例如,要得到 130 的结果将是 (2*20)+(3*30) = 130

sums 2 mavg '(a*b)

似乎让我走到了那里,但是 2 的 window 没有被应用。我尝试过 sumsumssum eachwavgmavg 等,但我完全被卡住了。有人能帮忙吗?谢谢!

这条线应该适合你:

2 msum a*b

如下所示:

q)a:1 2 3 4
q)b:10 20 30 40
q)2 msum a*b
10 50 130 250

有关关键字msum的更多信息,您可以查看Kx参考页面: https://code.kx.com/wiki/Reference/msum

希望对您有所帮助!

或者你可以使用副词 each prior:

q)+':[a*b]

然而,这仅适用于 window 大小为 2 的情况,如果您的数据包含空值,则需要用 0 填充:

q)+':[0^a*b2]

积极的一面是,在这种情况下它比使用 msum 更快。

q)\ts:1000000 +':[0^a*b2]
940 1264
q)\ts:1000000 2 msum a*b2
1556 1104