2011-07-26 63 views
2

我想通過將它翻譯成Cython來加速我的Python。它使用函數scipy.integrate.quad,它需要一個可調用python作爲其參數之一。有什麼辦法可以在Cython的cdef語句中定義和傳遞函數,所以我可以使用它?從Cython的cdef語句中使用scipy.integrate.quad?

謝謝。

回答

3

是的,你只需要用python函數包裝函數。

def py_callback(a): 
    return c_callback(a) 

cdef float c_callback(float a): 
    return a * a 

... 
scipy.integrate.quad(py_callback) 

當然有一些轉換過載。 另一種方法是查看如何實現該功能。

  • 如果是一個包裝到C函數嘗試直接調用從文件PYX (創建包裹SciPy的C-模塊PXD)的C函數。
  • 如果是純Python嘗試將其轉換爲cython。

否則,你必須使用一些其他的純C集成函數,並跳過scipy之一。