【问题标题】:Use scipy.integrate.quad from within a cdef statement in Cython?在 Cython 的 cdef 语句中使用 scipy.integrate.quad?
【发布时间】:2011-10-13 16:39:34
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: python function scipy cython numerical-integration


    【解决方案1】:

    是的,你只需要用 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 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多