用cython重写我的代码值得吗?

2024-09-30 01:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python程序,使用numpy和scipy。 在其中添加cython将是一个耗时的过程,因为数据类型有很多变化

它的cprofile是这样的: http://imgur.com/a/Sgvof

大部分时间(73%)被<scipy.integrate_odepack.odeint>耗尽 我的问题是,使用cython是否可以加速这个函数(也许是通过更快的调用)以及其他的功能。 在本例中,此函数被调用了~10^6次。 如果是的话,我能期待多快? 如果速度至少是4到5倍,我会考虑采用这个方法

注:

如果提供的信息不足,请在下面发表评论,我很乐意提供

谢谢你


Tags: 函数程序numpycomhttp过程时间scipy
2条回答

好吧,<scipy.integrate_odepack.odeint>的一半时间花在dx_dv和{}这些看起来像是python函数。这些是您可以针对的功能,尤其是在它们很复杂的情况下。在

要记住的一件事是,如果减速仅仅是因为calling overhead * number of calls,那么我就不指望事情会有太大改善。这种开销不会消失,事实上,它可能会变得更加复杂。代替SciPy C->;Python,您将使用SciPy C->;Python->;您的C

很可能你不会看到太多(如果有的话)改善。SciPy(更具体地说,是您最感兴趣的代码,odeint)已经是一个CPython模块(用Fortran编写),而不仅仅是python。在

如果这是一个只使用python的函数调用,那么用Cython编写它(这比编写一个完整的CPython模块要容易得多,尽管我个人会编写一个c或c++dll并使用ctypes调用它……)会提高性能。但在这种情况下可能不会。在

相关问题 更多 >

    热门问题