如何在Cython的cdef语句中使用scipy.integrate.quad?
我正在尝试通过把我的Python代码转换成Cython来加速它。我的代码使用了一个叫做scipy.integrate.quad的函数,这个函数需要一个可以调用的Python函数作为参数之一。请问有没有办法在Cython的cdef语句中定义并传递一个函数,这样我就可以使用它了?
谢谢。
1 个回答
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文件调用这个C函数(创建一个pxd文件来包装scipy的C模块)。
- 如果是纯Python的,尝试把它转换成cython。
否则,你就得使用其他纯C的集成功能,跳过scipy这个。