【问题标题】:Understanding moving window calcs in kdb了解 kdb 中的移动窗口计算
【发布时间】:2017-10-19 16:13:54
【问题描述】:

我很难从 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 一起应用。有没有办法轻松理解这一点?

【问题讨论】:

    标签: kdb q-lang


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2017-03-02
      • 2018-09-11
      相关资源
      最近更新 更多