了解 kdb 中的移动窗口计算



我正在努力理解kx食谱中的这个q代码编程习语:

q)swin:{[f;w;s] f each { 1_x,y }[w#0;s]}
q)swin[avg; 3; til 10]
0 0.33333333 1 2 3 4 5 6 7 8

符号令人困惑。 作为初学者,有没有一种简单的方法可以分解它?

我知道函数的紧凑符号可能等同于这个

swin:{[f;w;s] f each {[x; y] 1_x, y }[w#0;s]}

w#0 表示重复 0 w 次(前几个观察值w填充物吗?(,1_x, y 表示在删除第一个观察结果后将 x 连接到 y。 但我不明白这如何与每个应用f = avg一起发挥作用。 有没有办法轻松理解这一点?

http://code.kx.com/q/ref/adverbs/#converge-iterate

二进制(双参数(函数上的扫描 (\( 将第一个参数作为种子值 - 在本例中为 3#0 - 并遍历第二个列表中的每个项目 - 在本例中直到 10 - 应用函数(附加新值,先删除(。

q){1_x,y}[3#0;til 10]
0 0 0
0 0 1
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9

所以现在你有十个列表,你可以对每个列表应用一个函数 - 在本例中为 avg,但它可以是适用于列表的任何其他函数

q)med each {1_x,y}[3#0;til 10]
0 0 1 2 3 4 5 6 7 8f
q)
q)first each {1_x,y}[3#0;til 10]
0 0 0 1 2 3 4 5 6 7
q)
q)last each {1_x,y}[3#0;til 10]
0 1 2 3 4 5 6 7 8 9

最新更新