Exxeleron的qPython「是一個Python庫,爲Python和kdb +進程之間的進程間通信提供支持。」儘管PyQ提供了相同的功能,但PyQ提供的不僅僅是IPC。
PyQ是一個運行在kdb +實例內的全功能Python解釋器。對於Python程序員來說,PyQ可以直接訪問kdb +數據,而無需在q中編程。對於q程序員來說,PyQ提供了一個可以輕鬆訪問Python着名的豐富的計算和可視化庫。
舉一個例子,這裏是一個線性插值函數inp
寫入問:
inp:{y[i]+(z-x i)*(deltas[y]%deltas x)1+i:x bin z}
它有三個參數:x
和y
是已知數據點的座標和z
是的x座標內插值。它返回插值值的y座標。同樣的功能可以在PYQ使用純Python語法來寫:
如果您在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程序員,如果你想使用q的numpy.interp,你只需要一個簡單的包裝器,在返回結果之前將結果轉換爲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的rubrics,在易用性上,qPython作爲一個純Python庫可能更容易安裝,但是PyQ編程通常更簡單,因爲它不需要單獨的kdb +服務器。質量與qPython相當。 PyQ從版本3.0.1和Python 3.1開始支持python 3.x支持。目前(2017年)它使用Python 2.7,3.5和3.6進行了積極的測試。速度比較不公平,因爲PyQ可以直接訪問kdb +數據並且不需要IPC,因此它可以完成比qPython快100倍的任務。
聲明:我是PyQ的作者。
對於[PyQ](https://pyq.enlnt.com)支持的Python版本,您的「kdb/python指南」不正確。 PyQ自2012年發佈[版本3.0.1](https://pyq.enlnt.com/whatsnew/changelog.html#pyq-3-0-1)以來支持3.x系列Python。 –