Python round()太慢,更快的方法来降低精度?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python round()太慢,更快的方法来降低精度?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1284字,纯文字阅读大概需要2分钟。
内容图文
![Python round()太慢,更快的方法来降低精度?](/upload/InfoBanner/zyjiaocheng/806/59e909f415c444b79a353bf302425f18.jpg)
我正在做以下事情:
TOLERANCE = 13
some_float = ...
round(some_float, TOLERANCE)
这是多次运行,因此性能很重要.由于浮点表示错误,我必须舍入some_float.我实际上并不需要在这个意义上“舍入”数字,只需删除13个尾随数字后的数字.
有更快的方法吗?
解决方法:
我已经做了一些长凳比较圆(some_float,TOLERANCE)和int(some_float * p 0.5)/ p(p为10 ** TOLERANCE),结果如下:
>轮:6.20秒
> int divide multiply:3.53
我的板凳:
import time
TOLERANCE = 5
some_float = 12.2439924563634564564564
nb_loops = 10000000
start_time = time.time()
for _ in range(nb_loops):
r1 = round(some_float, TOLERANCE)
print(r1,time.time()-start_time)
start_time = time.time()
p = 10**TOLERANCE
for _ in range(nb_loops):
r2 = int(some_float * p + 0.5)/p
print(r2,time.time()-start_time)
结果:
12.24399 6.208600997924805
12.24399 3.525486946105957
所以int解决方案更快. round可能更好地处理负数的舍入(有人评论说,它会产生很多额外的调用,所以代码更复杂).根据输入数字的符号,舍入可能不同.准确性与原始速度再次相同.
添加0.5或不加圆或截断.这似乎是一个细节,但int解决方案(假设预先计算10 ** TOLERANCE)似乎更快.
如果你想使用这种技术,你可能会想把舍入代码放在一个函数中:
TOLERANCE = 5
p = 10**TOLERANCE
def my_round_5(some_float):
return int(some_float * p + 0.5)/p
并称之为:
r2 = my_round(some_float)
这仍然比圆形更快,但比使用公式内联慢一点(因为函数调用不是免费的)
内容总结
以上是互联网集市为您收集整理的Python round()太慢,更快的方法来降低精度?全部内容,希望文章能够帮你解决Python round()太慢,更快的方法来降低精度?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。