Python中的操作顺序和快速计算
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的操作顺序和快速计算,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1142字,纯文字阅读大概需要2分钟。
内容图文
![Python中的操作顺序和快速计算](/upload/InfoBanner/zyjiaocheng/660/6433d95a7d3540af9f3587c8acaf475e.jpg)
我正在尝试优化必须多次(多次)评估以下数学函数的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
内容总结
以上是互联网集市为您收集整理的Python中的操作顺序和快速计算全部内容,希望文章能够帮你解决Python中的操作顺序和快速计算所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。