Kdb 使用集合窗口计算两个列表的加权移动平均值

Kdb 使用集合窗口计算两个列表的加权移动平均值,kdb,Kdb,如果我有两份清单: a:1 2 3 4; b:10 20 30 40; 我想在2的窗口内求两个列表的乘积之和。因此,结果集应为: 10 50 130 250 例如,要得到130的结果,它将是(2*20)+(3*30)=130 似乎让我有了一部分,但是2的窗口没有被应用。我试过用sum,sums,sum-each,wavg,mavg等进行实验,我完全被卡住了。有人能帮忙吗?谢谢 这一行应该适合您: 2msum a*b 如下所示: q)a:1 2 3 4 q)b:10 20 30 40 q)2

如果我有两份清单:

a:1 2 3 4;
b:10 20 30 40;
我想在2的窗口内求两个列表的乘积之和。因此,结果集应为:

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


似乎让我有了一部分,但是2的窗口没有被应用。我试过用
sum
sums
sum-each
wavg
mavg
等进行实验,我完全被卡住了。有人能帮忙吗?谢谢

这一行应该适合您:

2msum 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参考页:


希望有帮助

这一行应该适合您:

2msum 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参考页:


希望有帮助

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

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

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

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

如果使用
previor
关键字,中缀
(+)previor a*b
或前缀
previor[+;a*b]
可能更清晰,如果使用
previor
关键字,中缀
(+)previor a*b
或前缀
previor[+;a*b]