在 KDB 中组合符号
Composing symbols in KDB
我目前正在开发一个与 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 的格式,我在这里和那里删除了一些反引号
这是您要找的吗?我把它隔开一点。
`$"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"
..
我目前正在开发一个与 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 的格式,我在这里和那里删除了一些反引号
这是您要找的吗?我把它隔开一点。
`$"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"
..