我在python中使用numpy和scipy有一个程序。 由于数据类型有很多变化,因此在其中添加cython将是一个时间过程
它的cprofile看起来像这样: http://imgur.com/a/Sgvof
<scipy.integrate_odepack.odeint>
大部分时间(73%)用完了
我的问题基本上是,使用cython加速这个功能(可能通过更快的调用)和其余的。
在此示例中,此函数被称为~10 ^ 6次。
如果是这样,我可以期待多快?
如果加速至少是4x到5x
请注意:
如果提供的信息不充分,请在下面发表评论,我很乐意提供
谢谢
答案 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.