从C扩展调用Python函数的速度成本
我正在写一个程序,其中包括模拟几个不同变量的进化路径。该程序的大部分是用Python编写的,但我正在为模拟循环(~15k)编写代码,作为C扩展以提高速度。然而,我仍然希望利用Numpy的随机数生成器()。我知道我可以从扩展中调用Python函数,但这会降低C循环的速度,从而否定编写扩展的初衷吗?当从C扩展调用Python函数时,会产生部分开销:从C扩展调用Python函数的速度成本,python,c,numpy,Python,C,Numpy,我正在写一个程序,其中包括模拟几个不同变量的进化路径。该程序的大部分是用Python编写的,但我正在为模拟循环(~15k)编写代码,作为C扩展以提高速度。然而,我仍然希望利用Numpy的随机数生成器()。我知道我可以从扩展中调用Python函数,但这会降低C循环的速度,从而否定编写扩展的初衷吗?当从C扩展调用Python函数时,会产生部分开销: 要传递给python函数的C变量需要包装在python对象中。这与直接在Python中创建对象的成本差不多 需要调用Python函数。这将花费与普通Py
for
循环,那么这可能不值得。如果你做了很多可以用C来完成的数据操作,即使你在某处调用了Python函数,你也会保存所有的数据操作
但最快的方法可能是使用numpy并直接从C调用numpy函数。这将使您不必将所有参数包装到Python对象中,而仍然使用numpy的功能,从而避免大部分开销。您需要了解许多细节,但是numpy中的随机数生成器有一个C接口。我认为这是您想要包含的头文件,但是还有一个。感谢您指出
randomkit.h
和distributions.h
。作为此功能的附加功能,还需要相应的.c文件(randomkit.c
和distributions.c
)。它们需要包含在setup.py的源
列表中。