我目前正在尝试优化一个程序。主要瓶颈实际上是针对numpy数组进行的相当简单的一行计算,例如:
(p-1) * c**(p-1)/(v_dt+c)**p
这个计算在我的机器上大约需要1/50秒的时间
(使用timeit进行计时:1000次循环,3次取最佳结果:每个循环花费21.8毫秒)
问题是,这个小函数(我还有几个类似的函数)在一个循环中被调用了约500次,在变量循环大约100次左右。因此,这一行代码突然增加了20分钟的运行时间。
有哪些最好的方法可以加速Python中的数学计算?Python技巧可以做多少?我已经研究过c_types和可能的Cython,但我应该如何使用它们?我需要为这些瓶颈函数编写c代码,还是可以使用已经编译好的库(我没有使用c的经验)?
非常感谢。
编辑: 我忘了提到,我已经在寻找循环的并行化选项,但仍希望直接加速这些瓶颈函数,因为这是性能关键代码。
(p-1) * c**(p-1)/(v_dt+c)**p
,可以尝试使用(p-1) * (c/(v_dt+c))**p / c
来提高运算速度。 - user447688