从 Python 调用 C 数学函数的高效解决方案
Efficient Solution for Calling C Math Functions from Python
我听说过从 Python 代码调用 C 函数的不同方法,例如 ctypes、cython、swig、Boost.python 等。当然,每种方法都各有利弊。我的问题是关于效率。我需要从 Python 调用 C 数值函数。这种C函数的一个典型例子是:
double f(double x){
return sin(x)+cos(x)-pow(2,x) + x*x;
}
一次调用需要迭代2000-200000次运行。
在这种情况下,我应该使用哪个C->Python
变压器?
调用用 C 实现的函数不会神奇地使您的程序 运行 更快。 不执行 用Python 编写的代码可能会加速您的程序。因此,将这样一个简单的函数移动到 C 例程中不会有任何重要意义。如果在紧凑的循环中调用它,函数本身可能很快,但是 Python 中编写的循环的开销将完全占主导地位。所以一般的想法是将任务 尽可能大 移动到 C 例程中。在您的示例中,这可能是整个循环。一旦您对 C 函数的单次调用所完成的工作量足够大,函数调用开销本身就可以忽略不计,因此您不必太担心它。以您认为最方便的方式调用该函数。它不会以可衡量的方式影响性能的可能性很高。
我听说过从 Python 代码调用 C 函数的不同方法,例如 ctypes、cython、swig、Boost.python 等。当然,每种方法都各有利弊。我的问题是关于效率。我需要从 Python 调用 C 数值函数。这种C函数的一个典型例子是:
double f(double x){
return sin(x)+cos(x)-pow(2,x) + x*x;
}
一次调用需要迭代2000-200000次运行。
在这种情况下,我应该使用哪个C->Python
变压器?
调用用 C 实现的函数不会神奇地使您的程序 运行 更快。 不执行 用Python 编写的代码可能会加速您的程序。因此,将这样一个简单的函数移动到 C 例程中不会有任何重要意义。如果在紧凑的循环中调用它,函数本身可能很快,但是 Python 中编写的循环的开销将完全占主导地位。所以一般的想法是将任务 尽可能大 移动到 C 例程中。在您的示例中,这可能是整个循环。一旦您对 C 函数的单次调用所完成的工作量足够大,函数调用开销本身就可以忽略不计,因此您不必太担心它。以您认为最方便的方式调用该函数。它不会以可衡量的方式影响性能的可能性很高。