KDB embedQ在Python中使用Q中的数组

2024-09-30 16:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用JupyterQ,q中有两个表:

tbl1: ([]month:(1997.01;1997.01;1997.01);
    ric:(3#`GTGS.SI);
    date:(1997.01.06T01:19:21.160;1997.01.06T01:53:57.230;1997.01.06T07:24:19.240);
    price:(0.71;0.72;0.73));

tbl2: ([]month:(1997.01;1997.01;1997.01);
    ric:(3#`NSWF.SI);
    date:(1997.01.06T01:19:21.160;1997.01.06T01:53:57.230;1997.01.06T07:24:19.240);
    price:(0.45;0.46;0.47));

我有一个用python定义的类teCalc

我想向它传递两个数组,如下所示(在python中): teCalc.addObservations(tbl1, tbl2)

如何在python中将这些q表传递给类

以下功能:

print .p.import[`numpy;`:array][tbl1]

给我:

{'month': array([1997.01, 1997.01, 1997.01]), 'ric': ['GTGS.SI', 'GTGS.SI', 'GTGS.SI'], 'date': array([-1089.94489398, -1089.92086539, -1089.69144398]), 'price': array([0.71, 0.72, 0.73])}

因此,我可以看到可以将q中的表转换为python对象

然而,我在python中将其分配给变量的所有尝试都失败了。如果我在JupyterQ中的python代码行中引用tbl1或tbl2(例如p)print(tbl1)),那么tbl1变量名将无法识别

请务必提出建议。如何在JupyterQ中用Python创建的类上使用Q中的数据

感谢和问候

西蒙


Tags: date定义arrayprice中将printsimonth
1条回答
网友
1楼 · 发布于 2024-09-30 16:28:48

我从KX的康纳那里得到了这个答案

选择是使用Set将数据导入python,或者使用Get将python类导入Q

真的很酷

西蒙


嗨,西蒙

分配q对象以便从API的Python端定义的函数中访问,需要设置对象。在这种情况下,您正在描述您要运行的位置

p)print(tbl1)

您需要在以下步骤中运行此操作:

// Define the q table
mytab:([]5?1f;5?1f)
// set the q table converted to a python dictionary to python variable tbl1
.p.set[`tbl1;mytab]
// Print from the python side of the interface
p)print(tbl1)

关于用q对象调用类,您需要按照上面的方法从q端到python进行设置

.p.set[`tbl1;tbl1]
.p.set[`tbl2;tbl2]
p)teCalc.addObservations(tbl1, tbl2)

或者“获取”python可调用对象并将其分配给q可调用函数,然后直接在q数据上运行,而不需要设置

// Load the script containing the required class
\l myclass.p
// Retrieve the class
teCalc:.p.get[`teCalc]
// Access the relevant function
addObservations:teCalc[`:addObservations]
// Run on the relevant q data and return result to q (denoted by trailing `)
addObservations[tbl1;tbl2]` 

需要注意的是,当embedPy将q表转换为Python时,它会将q表转换为字典列表(这是q表的准确表示,但可能会违反直觉),因此,如果您需要将数据作为用例的数据帧,则可能需要手动进行转换。这是使用两个函数完成的。ml.tab2df/.ml.df2tab都可以在Kx机器学习工具包here中找到

有关embedPy的更多信息,请访问下面的链接,这些链接详细介绍了上述所有内容

https://code.kx.com/q/ml/embedpy/userguide/

https://code.kx.com/q/ml/embedpy/faq/

祝你一切顺利

康纳

相关问题 更多 >