首页 文章

在KDB中编写符号

提问于
浏览
0

我目前正在开发一个与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的格式化,我在这里和那里删除了一些反引号

3 回答

  • 0

    使用roll运算符对于生成此类数据非常有用:http://code.kx.com/q/ref/random/#roll

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

    PARAMATERS:

    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)
    
  • 1

    这是你想要的?我把它分开了一点点 .

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

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

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

    为了打破这一点: 100?/:4 10 返回两个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" ,"..
    

    每个右边的副词修改join函数,因此:

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

    我们可以用each-both ' 修改派生函数 ,/: ,在第一个向量中用 "exchange" 作为前缀,在第二个向量中用 "inst" 作为前缀 .

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

    现在我们只需要将这对矢量转换成对矢量

    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"
    ..
    

相关问题