KDB中的符号组合

KDB中的符号组合,kdb,q-lang,Kdb,Q Lang,我目前正在从事一个与kdb+数据库交互的python项目。数据库的未来版本将有一个小的变化,因为我不能继续我的python编程,我想我应该自己试一试,而不是等待kdb开发人员的更新 我正在使用一个模拟数据库,它会随机生成如下符号:instr1、instr2、instr81等等 我环顾四周,发现符号是由.gen.uni:$“instr”、/:string til.gen.cfg.uniSize行生成的 我想实现的是符号是exchangeX.instrY,而不是instrY(其中X和Y只是一些生成的

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

我正在使用一个模拟数据库,它会随机生成如下符号:
instr1
instr2
instr81
等等

我环顾四周,发现符号是由
.gen.uni:$“instr”、/:string til.gen.cfg.uniSize行生成的

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

为了方便起见,我将行改为
$“instr”,/:string直到4
,这样我的大脑就不会那么痛了

一个人怎样才能做到这一点?我发现了
sv
函数,因此我尝试了许多
sv的变体($“exchange”、/:string til 4;$“instr”、/:string til 4)
,但似乎没有任何效果

谢谢你的时间


PS:由于SO的格式设置,我在这里和那里删除了一些背景标记

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

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

这就是你要找的吗?我把它隔开一点

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

使用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)

使用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)
删除一些重复。对于来自4个交易所的10个仪器中的100个示例:

"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10
稍微分解一下:
100?/:4 10
返回两个100向量,一个从0-3提取,另一个从0-99提取,由
/:
()副词提供<代码>字符串
将它们强制转换为字符串。让我们称之为
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" ,"..
每个右副词都修饰该功能,因此:

q)"exchange",/:n 0
"exchange3"
"exchange2"
"exchange3"
..
我们可以用
,/:
修改派生函数
,将第一个向量中的字符串前缀为
“exchange”
,第二个向量中的字符串前缀为
“inst”

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

q)flip("exchange";"inst"),/:'n
"exchange3" "inst9"
"exchange2" "inst5"
"exchange3" "inst2"
"exchange0" "inst3"
"exchange3" "inst7"
..
并使用每个连接对的权限进行修改:

q)"."sv/:flip("exchange";"inst"),/:'n
"exchange3.inst9"
"exchange2.inst5"
"exchange3.inst2"
"exchange0.inst3"
"exchange3.inst7"
..
删除一些重复。对于来自4个交易所的10个仪器中的100个示例:

"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10
稍微分解一下:
100?/:4 10
返回两个100向量,一个从0-3提取,另一个从0-99提取,由
/:
()副词提供<代码>字符串将它们强制转换为字符串。让我们称之为
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" ,"..
每个右副词都修饰该功能,因此:

q)"exchange",/:n 0
"exchange3"
"exchange2"
"exchange3"
..
我们可以用
,/:
修改派生函数
,将第一个向量中的字符串前缀为
“exchange”
,第二个向量中的字符串前缀为
“inst”

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

q)flip("exchange";"inst"),/:'n
"exchange3" "inst9"
"exchange2" "inst5"
"exchange3" "inst2"
"exchange0" "inst3"
"exchange3" "inst7"
..
并使用每个连接对的权限进行修改:

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

你好!是的,看起来的确如此!当我尝试将其转换回生成器格式并放入生成器文件时,它无法按预期工作:
.gen.uni:`$“exchange”、/:(string til.gen.cfg.uniSize)、“.inst”、/:string til.gen.cfg.uniSize
。有什么想法吗?我觉得不错。当你说它没有像预期的那样工作时,你期望的是什么?你的回答非常有效。问题是,我试图在模拟数据生成器中实现这一点。因此,我希望使用脚本中已经存在的
.gen.cfg.uniSize
变量,而不是在最后使用固定的
til 4
(同样,我没有编写它,只是尝试实现这一点,以便继续编写python代码)。我不确定这个变量是什么,但是如果我查找定义,我会发现这个
.gen.cfg.uniSize:.cr.getCfgField[`this;`group;`cfg.uniSize]仪器可以有多个
交换
。例如:
exchange3.instr8
exchange20.instr8
。使用
til 4
时,数字始终匹配。这对于我的用例来说有点无用。谢谢您抽出时间,非常感谢;)你好!是的,看起来的确如此!当我尝试将其转换回生成器格式并放入生成器文件时,它无法按预期工作:
.gen.uni:`$“exchange”、/:(string til.gen.cfg.uniSize)、“.inst”、/:string til.gen.cfg.uniSize
。有什么想法吗?我觉得不错。当你说它没有像预期的那样工作时,你期望的是什么?你的回答非常有效。问题是,我试图在模拟数据生成器中实现这一点。因此,我希望使用脚本中已经存在的
.gen.cfg.uniSize
变量,而不是在最后使用固定的
til 4
(同样,我没有编写它,只是尝试实现这一点,以便继续编写python代码)。我不确定这个变量是什么,但是如果我查找定义,我会发现这个
.gen.cfg.uniSize:.cr.getCfgField[`this;`group;`cfg.uniSize]仪器可以有多个
交换
。例如:
exchange3.instr8
exchange20.instr8
。使用
til 4
时,数字始终匹配。这对于我的用例来说有点无用。谢谢您抽出时间,非常感谢;)谢谢你的回答!中高音