在 KDB 中组合符号

Composing symbols in KDB

我目前正在开发一个与 kdb+ 数据库交互的 python 项目。数据库的未来版本将有一个小的变化,由于我无法继续我的 python 编程,我想我会自己试一试,而不是等待 kdb 开发人员的更新。

我正在使用一个模拟数据库,它吐出随机生成的符号,如下所示:instr1instr2instr81

我环顾四周,相信符号是由行 .gen.uni:$"instr",/: string til .gen.cfg.uniSize;

生成的

我想要实现的是让符号成为 exchangeX.instrY 而不是 instrY(其中 X 和 Y 只是一些生成的数字)。

为了方便起见,我已将线路更改为 $"instr",/: string til 4,这样我的大脑就不会那么疼了。

如何实现这样的目标?我发现了 sv 函数,因此我尝试了 sv ($"exchange",/: string til 4;$"instr",/: string til 4) 的许多变体,但似乎没有任何效果。

感谢您的宝贵时间!

PS:由于 SO 的格式,我在这里和那里删除了一些反引号

这是您要找的吗?我把它隔开一点。

`$"exchange" ,/: (string til 4) ,' ".inst" ,/: string til 4

使用滚动运算符可用于生成此类数据:http://code.kx.com/q/ref/random/#roll

下面的函数将生成一个随机的符号列表。

参数:

x - 您要生成的符号数

y - 不同交易所的数量

z - 不同工具的数量

q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)}


q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)}[100;4;10]
`exch0.inst2`exch3.inst3`exch3.inst0`exch2.inst0`exch3.inst4`exch3.inst4`exch2.inst0`exch0.inst3`exch3.inst4`exch0.inst5`exch3.inst0`exch1.inst5`exch1.inst7`exch2.inst4`exch2.inst3`exch3.inst1`exch3.inst6`exch2.inst2`exch2.inst..
q)

Adverbs 删除一些重复。对于来自 4 个交易所中任何一个的 10 个工具中的任何一个的 100 个示例:

"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10

稍微分解一下:100?/:4 10 returns 两个 100 向量,一个从 0-3 绘制,另一个从 0-99 绘制,由 /:each-right) 副词。 string 将它们转换为字符串。我们称之为 n.

q)show n:string 100?/:4 10
,"3" ,"2" ,"3" ,"0" ,"3" ,"3" ,"1" ,"2" ,"3" ,"3" ,"3" ,"3" ,"3" ,"1" ,"1" ,"..
,"9" ,"5" ,"2" ,"3" ,"7" ,"7" ,"6" ,"7" ,"2" ,"0" ,"3" ,"5" ,"0" ,"5" ,"2" ,"..

each-right副词修饰join函数,所以:

q)"exchange",/:n 0
"exchange3"
"exchange2"
"exchange3"
..

并且我们可以修改 派生函数 ,/:each-both ' 以 [=22 作为第一个向量中字符串的前缀=] 和第二个 "inst"

q)("exchange";"inst"),/:'n
"exchange3" "exchange2" "exchange3" "exchange0" "exchange3" "exchange3" "exch..
"inst9"     "inst5"     "inst2"     "inst3"     "inst7"     "inst7"     "inst..

现在我们只需要flip将向量对转换为向量对

q)flip("exchange";"inst"),/:'n
"exchange3" "inst9"
"exchange2" "inst5"
"exchange3" "inst2"
"exchange0" "inst3"
"exchange3" "inst7"
..

并用 每对 修改 sv 以加入每对:

q)"."sv/:flip("exchange";"inst"),/:'n
"exchange3.inst9"
"exchange2.inst5"
"exchange3.inst2"
"exchange0.inst3"
"exchange3.inst7"
..