是否值得在cython中重写我的代码?

时间:2012-05-04 11:15:45

标签: python numpy scipy cython

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

它的cprofile看起来像这样: http://imgur.com/a/Sgvof

<scipy.integrate_odepack.odeint>大部分时间(73%)用完了 我的问题基本上是,使用cython加速这个功能(可能通过更快的调用)和其余的。 在此示例中,此函数被称为~10 ^ 6次。 如果是这样,我可以期待多快? 如果加速至少是4x到5x

,我会考虑追求这个

请注意:

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

如果这是一个只有python的函数调用,那么在Cython中编写它(这比写一个完整的CPython模块更容易,虽然我亲自编写ac或c ++ dll并使用ctypes调用它...)会提高你的表现。但可能不是在这种情况下。

答案 1 :(得分:3)

<scipy.integrate_odepack.odeint>dx_dv中花费了dx_du的一半时间,这些看起来就像是python函数。这些是你可以定位的功能,特别是如果它们很复杂的话。

要记住的一件事是,如果减速只是因为calling overhead * number of calls,那么我不希望事情有所改善。这种开销不会消失,事实上它可能会变得更加复杂。而不是SciPy C - &gt; Python,你将做SciPy C - &gt; Python - &gt;你的C.