Python中的操作顺序和快速计算

我正在尝试优化必须多次(多次)评估以下数学函数的Python代码

from math import pow, pi
from scipy.special import gamma

def norm_spirals(a,k):
    return pi*pow(abs(gamma(0.25+0.5*k+0.5j*a)/gamma(0.75+0.5*k+0.5j*a)),2)

我已经使用cProfile和timeit尽可能优化了我的代码.我还摆脱了对过程的调用,并将此计算直接嵌入到代码中.我能想到的最优化的最后一步是调整数学运算的顺序,以加快评估速度.上面的公式是我使用timeit获得的最快形式.

>您是否会想到此公式的另一个计算顺序可能更快?
>您对我可以使用的其他优化有任何想法吗?

预先感谢您的帮助 !

解决方法:

这是四个简单的转换来加速您的代码:

1)将pow(x,2)替换为x ** 2.0:

def norm_spirals(a,k):
    return pi* abs(gamma(0.25+0.5*k+0.5j*a)/gamma(0.75+0.5*k+0.5j*a)) ** 2.0

2)分解common subexpression:0.25 0.5 * k 0.5j * a

def norm_spirals(a,k):
    se = 0.25 + 0.5*k + 0.5j*a
    return pi * abs(gamma(se)/gamma(se + 0.5)) ** 2.0

3)本地化全局查询:

def norm_spirals(a,k, pi=pi, abs=abs, gamma=gamma):
    se = 0.25 +0.5*k + 0.5j*a
    return pi * abs(gamma(se)/gamma(se + 0.5)) ** 2.0

4)用b * b代替平方运算.这称为strength reduction

def norm_spirals(a,k, pi=pi, abs=abs, gamma=gamma):
    se = 0.25 + 0.5*k + 0.5j * a
    b = abs(gamma(se)/gamma(se + 0.5))
    return b * b * pi
上一篇:PHP-MySQL查询优化?


下一篇:javascript-Chrome的V8标记功能可反复优化,直到放弃