【问题标题】:KDB/Q how do we calculate the moving medianKDB/Q 我们如何计算移动中位数
【发布时间】:2021-01-09 16:09:06
【问题描述】:

kdb/q 中已经有移动平均线了。

https://code.kx.com/q/ref/avg/#mavg

但是如何计算移动中位数?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    这是一种幼稚的方法。它从一个空列表和空中位数开始,并遍历列表,每次都输入一个新值。

    子列表用于固定窗口,并将这个窗口与中位数一起作为状态传递到下一次迭代中。

    在扫描结束时 \ 将输出每次迭代的状态,从中我们获取每个迭代的中值(第一个元素)

    mmed:{{(med l;l:neg[x] sublist last[y],z)}[x]\[(0n;());y][;0]}
    
    q)mmed[5;til 10]
    0 0.5 1 1.5 2 3 4 5 6 7
    
    q)i:4 9 2 7 0 1 9 2 1 8
    q)mmed[3;i]
    4 6.5 4 7 2 1 1 2 2 2
    

    【讨论】:

      【解决方案2】:

      这里还有一个通用的“滑动窗口”功能,您可以将所需的聚合器传递到:https://code.kx.com/q/kb/programming-idioms/#how-do-i-apply-a-function-to-a-sequence-sliding-window

      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
      q)update newcol:swin[med;10;mycol] from tab
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多