使用Cython重载Python数学函数

ibe*_*ell 7 python cython

这是我的基本问题:

我有一个导入的Python文件

from math import sin,cos,sqrt
Run Code Online (Sandbox Code Playgroud)

我需要这个文件仍然是100%CPython兼容,以允许我的开发人员编写100%CPython代码并使用为Python开发的伟大工具.

现在进入Cython.在我的Python文件中,trig函数被调用数百万次(代码的基础,不能改变它).有没有办法通过主python文件中的一些Python-fu,或Cython魔术,否则我可以改为使用C/C++数学函数使用Cython代码的一些变体

cdef extern from "math.h":
    double sin(double)
Run Code Online (Sandbox Code Playgroud)

这会给我近乎C的性能,这将是非常棒的.

斯特凡的谈话具体说明不能做到这一点,但谈话已经两年了,那里有很多有创意的人

Dou*_*gal 2

我不是 Cython 专家,但据我所知,您所能做的就是编写一个 Cython 包装器sin并调用它。不过,我无法想象这真的会比 更快math.sin,因为它仍然使用 Python 调用语义——开销在于调用函数的所有 Python 内容,而不是实际的三角计算,后者在使用时在 C 中完成CPython 也是如此。

您是否考虑过使用Cython 纯模式,这使得源代码与 CPython 兼容?

  • @ibell:当您显式导入它们时,它会执行:“from libc.math cimport sqrt”。 (2认同)