标签: kdb

如何计算相关矩阵?

我有一个带有列的表a, b, ccor[a;a]我可以使用函数形式以某种方式计算, cor[a;b],的相关矩阵吗cor[a;c]

?[table; (); 0b; (`aa`ab`ac)!((cor; `a; `a); (cor; `a; `b);(cor; `a; `b));
Run Code Online (Sandbox Code Playgroud)

如何生成最后一个参数的列表?(cor; a;b)

kdb

2
推荐指数
1
解决办法
3189
查看次数

如何在 kdb 中一次添加多个列?

不知何故,我只能找到显示如何添加一列的示例。

所以我编写了这段代码,它可以工作,但我知道有一种更好的方法可以做到这一点:表 t 已经存在,其中列填充了数据,我需要添加最初为空的新列。

 t: update column1:` from t;
 t: update column2:` from t;
 t: update column3:` from t;
 t: update column4:` from t;
Run Code Online (Sandbox Code Playgroud)

我尝试将其设为一个函数:

 colNames:`column1`column2`column3`column4;
 t:{update x:` from t}each colNamesList;
Run Code Online (Sandbox Code Playgroud)

但这只添加了一列并将其称为x。

任何改进此代码的建议将不胜感激。我必须添加的不仅仅是 4 列,因此我的代码很长。谢谢你!

kdb q-lang

2
推荐指数
1
解决办法
1614
查看次数

在列表中查询百分位数的有效方法

我遇到过几次从列表中收集百分位数的要求:

  1. 某个数字在哪个百分位内?
  2. 列表中的第 n 个百分位数是多少?

我写了这些方法来解决这个问题:

/for 1:    
percentileWithinThreshold:{[threshold;list] (100 * count where list <= threshold) % count list};

/for 2:
thresholdForPercentile:{[percentile;list] (asc list)[-1 + "j"$((percentile % 100) * count list)]};
Run Code Online (Sandbox Code Playgroud)

它们适用于两个用例,但我认为这是一个太常见的用例,所以 Q 可能已经提供了一些开箱即用的功能。知道是否已经存在其他东西吗?

kdb

2
推荐指数
1
解决办法
897
查看次数

如何设置落在 kdb+ 范围内的随机数?

在Kdb+中,如何使用“roll”函数使生成的随机数落在不以0开头的范围内?例如,如果我希望范围在 2-10 而不是 0-10 内怎么办?

我必须在代码中添加什么才能使其落入一个范围而不是默认的 0-x 范围内?我已经尝试并寻找了每一种方法,但似乎找不到一种方法。

kdb

2
推荐指数
1
解决办法
1388
查看次数

如何在 Haskell 中对这种递归结构进行建模?

我正在尝试通过 Haskell 类型系统对 kdb/q“原子和列表”进行建模。

在 kdb/q 中,所有数据都是由原子构建的。原子是特定数据类型的不可约值。Int、boolean 和 char 是原子的例子。列表是从原子构建的有序集合。由于 q 是一种向量语言,大多数内置操作都是原子的,因此它会递归到参数结构中,直到到达原子。

例如:

(1;2;3) 是一个简单的整数列表 1, 2, 3

(1.0;2;(3;4;5)) 是 1.0(float), 2(int) 的一般列表,以及简单的 int 列表 (3;4;5)

neg 是一个否定一个数字的函数。例如:

负 1 产生 -1

负 -1.0 产生 1f

负 (1.0;2;(3;4;5)) 产生 (-1f;-2;(-3;-4;-5))。

这就是激励我尝试在 Haskell 类型中模拟这种行为的原因。数据类型应该由原子类型和一个列表组成。

以下是我目前所拥有的简化版本。我还进一步尝试使其成为可折叠和可遍历的实例。

data Atom = I Int
          | C Char
          | D Double 
          deriving Show

data Q a = QAtom a 
         | QList [Q a]
         deriving Show

instance Functor Q where
    fmap f (QAtom a) = QAtom (f …
Run Code Online (Sandbox Code Playgroud)

haskell algebraic-data-types kdb traversable

2
推荐指数
1
解决办法
156
查看次数

C API 识别空符号

我有以下函数来识别空符号,哪里ns 应该代表空符号。

#include"k.h"

K test (K x) {
    K ns = ks("");
    if (abs(x->t) != KS) {
        R krr("type");
    }
    if (x->t > 0) {
        K res = ktn(KB,x->n);
        for (int i=0;i<x->n;++i){
            if (kK(x)[i] == ns) {
                kG(res)[i] = 1;
            }
            else {
                kG(res)[i] = 0;
            }
        }
        R res;
    }
    else {
        if (x == ns) {
            R kb(1);
        }
        else {
            R kb(0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

检查参数x(或kK(x)[i]arg的元素x)的相等性ns并没有按我预期的那样工作。

q)`test …
Run Code Online (Sandbox Code Playgroud)

kdb

2
推荐指数
1
解决办法
147
查看次数

如何查询此表以从符号列表中选择?

我想从符号列表中过滤掉包含 `1 的记录

示例表:

tab:([]a:((``1`2);`a;b);c:1 2 3);
Run Code Online (Sandbox Code Playgroud)

我试过这个:

select from tab where a = `1
Run Code Online (Sandbox Code Playgroud)

还有这个:

select from tab where `1 in raze a
Run Code Online (Sandbox Code Playgroud)

这些都不起作用。

kdb

2
推荐指数
1
解决办法
90
查看次数

如何使用“最近”时间戳而不是“asof”时间戳连接两个 KDB 表?

我试图以与“as of”连接非常相似的方式连接两个表,除了不是选择具有最后一个时间戳的行进行连接(假设它们按时间顺序排序),我想加入最接近的时间戳。例如:

q)t: ([]time:10:00:06 10:00:03 10:00:04;sym:`msft`ibm`ge;qty:100 200 150)
q)t
time     sym  qty
-----------------
10:00:06 msft 100
10:00:03 ibm  200
10:00:04 ge   150

q)q: ([]time:10:00:00 10:00:00 10:00:02 10:00:07 10:02:00;sym:`ibm`msft`msft`msft`ibm;px:100 99 101 102 98 )
q)q
time     sym  px
-----------------
10:00:00 ibm  100
10:00:00 msft 99
10:00:02 msft 101
10:00:07 msft 102
10:02:00 ibm  98
Run Code Online (Sandbox Code Playgroud)

加入时的标准:

q)aj[`sym`time;t;q]
time     sym  qty px
---------------------
10:00:06 msft 100 101 //10:00:02 is closest timestamp that is not greater than 10:00:06, so that px is chosen
10:00:03 …
Run Code Online (Sandbox Code Playgroud)

database kdb

2
推荐指数
1
解决办法
104
查看次数

在 kdb select 语句中计算 t 与实际数量

我注意到以下几点

select (count t)#`test from t
Run Code Online (Sandbox Code Playgroud)

退货

flip (enlist `x)!enlist enlist `test`test`test
Run Code Online (Sandbox Code Playgroud)

对比

select 3#`test from t
Run Code Online (Sandbox Code Playgroud)

哪个返回

flip (enlist `x)!enlist `test`test`test
Run Code Online (Sandbox Code Playgroud)

select (sum 1 2)#1 from tvsselect(1 + 2)#1 from t等类似

任何人都知道为什么选择中的关键字似乎导致返回是一个包含一行嵌套列表的表,其中包含 x 元素与一个包含 x 行的表?

kdb

2
推荐指数
1
解决办法
84
查看次数

如何在kdb中将多列合并为一列?

我写了一个下面的代码,但我认为会有更好的方法来解决这个问题。

我有这样的事情

table:([]time:9 11;Bid1px:4 5;Bid2px:7 3;Bid3px:6 8);
time Bid1px Bid2px Bid3px
-------------------------
9    4      7      6
11   5      3      8
table:update All_bid:flip(Bid1px;Bid2px;Bid3px) from table;
time Bid1px Bid2px Bid3px All_bid
---------------------------------
9    4      7      6      4 7 6
11   5      3      8      5 3 8
Run Code Online (Sandbox Code Playgroud)

我想使用如下所示的 Bidcols 编写代码,但似乎找不到方法,任何帮助将不胜感激。

Bidcols:`Bid1px`Bid2px`Bid3px;
table:update All_bid:flip(Bidcols????) from table;
Run Code Online (Sandbox Code Playgroud)

kdb q

2
推荐指数
1
解决办法
124
查看次数

标签 统计

kdb ×10

algebraic-data-types ×1

database ×1

haskell ×1

q ×1

q-lang ×1

traversable ×1