2011-07-26 90 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之一。