qpython3h怎么用_Python+Q(KDB)哪些工具易于使用和维护

Exxeleron的qPython“是一个Python库,支持Python和kdb+进程之间的进程间通信。”虽然PyQ提供了相同的功能,但PyQ提供的不仅仅是IPC。在

PyQ是一个在kdb+实例中运行的全功能Python解释器。对于Python程序员来说,PyQ可以直接访问kdb+数据,而不需要用q编程。对于q程序员来说,PyQ提供了对Python著名的一组丰富的计算和可视化库的轻松访问。在

举个例子,下面是用q写成的线性插值函数inp:inp:{y[i]+(z-x i)*(deltas[y]%deltas x)1+i:x bin z}

它有三个参数:x和{}是已知数据点的坐标,z是插值值的x坐标。它返回插值的y坐标。可以使用纯Python语法在PyQ中编写相同的函数:

^{pr2}$

如果你准备q中的数据x:0.1*til 10

y:x - x * x

z:5?1f

调用Python或q实现,都会得到相同的结果。在PyQ的Python提示符下,可以进行如下验证:>>> inp(q.x, q.y, q.z) == q.inp(q.x, q.y, q.z)

True

当然,一个有经验的Python程序员不需要从头开始编写这样的函数,因为NumPy已经有了numpy.interp来完成同样的工作。如果,作为一个q程序员,你想使用numpy.INTP公司在q中,您只需要一个简单的包装器,在返回结果之前将结果转换为K对象。这就是在q)提示符下执行此操作的方法q)p)import numpy; from pyq import q, K

q)p)def inp2(x, y, z): return K(numpy.interp(z, x, y))

q)p)q.inp2 = inp2

现在,inp2可以使用了:q)inp[x;y;z] ~ inp2(x;y;z)

1b

由于PyQ运行在kdb+内部,所以它可以免费获得IPC实现。例如,我可以在8888端口打开到远程服务器的连接,并用两行代码询问其本地时间:>>> h = q.hopen('::8888')

>>> h('.z.P')

k('2017.07.07D17:15:19.261285000')

但是,大多数任务都可以在PyQ中完成,而不需要任何IPC(甚至是复制),因为所有kdb+数据已经与Python代码处于同一进程中。在

为了涵盖OP的准则,在易用性方面,qPython作为纯Python库可能更容易安装,但是PyQ编程通常更容易,因为它不需要单独的kdb+服务器。PyQ documentation与{a5}的质量相当。PyQ从3.0.1和python3.1版本开始就提供了python3.x支持。目前(2017年),它正在积极测试Python2.7、3.5和3.6。速度比较是不公平的,因为PyQ可以直接访问kdb+数据,并且不需要IPC,所以它可以比qPython快100倍完成许多任务。在

免责声明:我是PyQ的作者。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值