使用设置的窗口计算2个列表的加权移动平均值

时间:2018-10-08 15:25:23

标签: kdb

如果我有两个列表:

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

我想在一个2的窗口内求和两个列表的乘积。因此结果集应该是:

10 50 130 250

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

sums 2 mavg '(a*b)

似乎可以帮助我实现目标,但是2的窗口没有被应用。我尝试使用sumsumssum eachwavgmavg等进行试验,但我完全陷入了困境。有人可以帮忙吗?谢谢!

2 个答案:

答案 0 :(得分:5)

此行应为您工作:

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

希望有帮助!

答案 1 :(得分:1)

或者,您也可以在每个之前使用副词:

q)+':[a*b]

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

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

从积极的角度来看,在这种情况下,它比使用msum更快。

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