我目前正在研究一个与kdb+数据库交互的python项目。数据库的未来版本将有一个微小的变化,并且由于我无法继续进行python编程,我想我会自己试一试,而不是等待kdb开发人员的更新。
我正在使用一个模拟数据库,该数据库会吐出随机生成的符号,如下所示:instr1
、instr2
、instr81
等。
我环顾四周,相信符号是由线条生成的.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的格式,我在这里和那里删除了一些反引号
使用 roll 运算符对于生成此类数据很有用: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)
这是你要找的吗?我把它隔开了一点。
`$"exchange" ,/: (string til 4) ,' ".inst" ,/: string til 4
副词删除了一些重复。对于来自 4 个交易所中的任何一个的 10 种工具中的任何一种的 100 个示例:
"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10
稍微分解一下:100?/:4 10
返回两个 100 向量,一个从 0-3 绘制,另一个从 0-99 绘制,由/:
(每个右(副词提供。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" ,"..
每个右副词修改连接函数,因此:
q)"exchange",/:n 0
"exchange3"
"exchange2"
"exchange3"
..
我们可以修改派生函数,/:
每个两个'
,以在第一个向量中的字符串前面加上"exchange"
,在第二个向量中的字符串前面加上"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"
..