我试图通过将 Python 翻译成 Cython 来加速它。它使用函数 scipy.integrate.quad,该函数需要一个可调用的 python 作为其参数之一。有没有办法在 Cython 的 cdef 语句中定义和传递函数,以便我可以使用它?
谢谢。
最佳答案
是的,您只需用 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 函数 (创建一个包装 scipy C 模块的 pxd)。
- 如果是纯Python,请尝试将其转换为cython。
否则,您必须使用其他一些纯 C 集成函数并跳过 scipy 函数。
关于python - 在 Cython 的 cdef 语句中使用 scipy.integrate.quad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835209/