了解 kdb 中的移动 window 计算
Understanding moving window calcs in 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
我很难理解 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