【问题标题】:How do I write a function that consumes columns in a query in KDB?如何编写使用 KDB 查询中的列的函数?
【发布时间】:2021-12-15 05:04:48
【问题描述】:

我有一个表格查询:

select lR cor mR from j

这很好用,我得到一个数字。

当我尝试使用我的自定义函数时:

center:{x - avg raze x}

fit1:{
  xc: 0^center[x];
  yc: 0^center[y];
  beta: raze yc lsq xc;
  intercept: (avg raze y) - (beta * avg raze x);
  raze beta
  }


select fit1[lR;mR] from j

我得到一列数字,因为它似乎按行而不是按列应用了函数。

两个问题:

  • 我该如何解决这个问题?
  • 是否可以看到cor的源码可以学习,还是关闭了?

编辑

t:([] date:tt; x:xx; y:yy)

t          x y
--------------
2021.01.01 0 4
2021.01.02 1 4
2021.01.03 2 4
2021.01.04 3 4
2021.01.05 4 4
2021.01.06 5 4
2021.01.07 6 4
2021.01.08 7 4
2021.01.09 8 4
2021.01.10 9 4

select fit1[x;y] from t

现在更新了一个适当的例子:

center:{x - avg raze x}

fit1:{
  xc: 0^center[x];
  yc: 0^center[y];
  beta: raze yc lsq xc;
  intercept: (avg raze y) - (beta * avg raze x);
  raze beta
  }

tt: 2021.01.01 + til 10
xx: 9h$til 10
yy: ((xx)*3) + 4
t:([] date:tt; x:xx; y:yy)
    date       x y
---------------
2021.01.01 0 4
2021.01.02 1 7
2021.01.03 2 10
2021.01.04 3 13
2021.01.05 4 16
2021.01.06 5 19
2021.01.07 6 22
2021.01.08 7 25
2021.01.09 8 28
2021.01.10 9 31

q)fit1[enlist xx;enlist yy]
,3f
q)select fit1[x;y] from t
y
----
-4.5
-3.5
-2.5
-1.5
-0.5
0.5
1.5
2.5
3.5
4.5

d

【问题讨论】:

    标签: kdb


    【解决方案1】:
    1. 我认为没有提供足够的信息来帮助确定您的问题,但您的函数创建了一个 intercept 变量,它不会在最终返回中使用该变量。这条线目前毫无意义。您的自定义函数并非旨在返回像 cor 这样的原子。

    2. 如果您只是在 q 控制台中输入关键字,则某些关键字会提供底层的 k 代码。如果您找回关键字,则它会被隐藏,但对于 cor 和 cov,文档中提供了等效代码。

    https://code.kx.com/q/ref/cor/ https://code.kx.com/q/ref/cov/

    【讨论】:

    • 当你说“我的函数不是设计为在原子返回”时,最后一行 raze beta 应该只是一个单数浮点数?我遇到的问题是内置函数就像 countsum 似乎接收列表作为参数,而我的函数似乎接收逐行原子。
    • 您的函数将接收整个列作为 lR 和 mR。您使用 each/each-both 来执行“逐行”。如果 beta 是必须的列表,则 raze 将返回一个列表。我不知道您的 center 函数在做什么,而且您还没有提供示例输入
    • 我添加了一个示例。对于任何寻找的人;诀窍是在传递它们之前弄清楚是否需要入伍。
    【解决方案2】:
    1. 要回答您的第一个问题,您可以:
    q)fit1[j`lR;j`mR]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多