使用集合 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 没有被应用。我尝试过 sum
、sums
、sum each
、wavg
、mavg
等,但我完全被卡住了。有人能帮忙吗?谢谢!
这条线应该适合你:
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
如果我有两个列表:
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 没有被应用。我尝试过 sum
、sums
、sum each
、wavg
、mavg
等,但我完全被卡住了。有人能帮忙吗?谢谢!
这条线应该适合你:
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