2

我正在尝试通过将其转换为 Cython 来加速我的 Python。它使用函数 scipy.integrate.quad,它需要一个可调用的 Python 作为其参数之一。有什么方法可以在 Cython 的 cdef 语句中定义和传递函数,以便我可以使用它?

谢谢。

4

1 回答 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 函数(创建一个包装 scipy C 模块的 pxd)。
  • 如果是纯 Python 尝试将其转换为 cython。

否则,您必须使用其他一些纯 C 集成函数并跳过 scipy 函数。

于 2011-08-09T19:23:27.080 回答