如何在Cython的cdef语句中使用scipy.integrate.quad?

2 投票
1 回答
1054 浏览
提问于 2025-04-16 22:18

我正在尝试通过把我的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这个。

撰写回答