python – 为什么生成随机整数的“常规”方法如此之慢?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么生成随机整数的“常规”方法如此之慢?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1633字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么生成随机整数的“常规”方法如此之慢?](/upload/InfoBanner/zyjiaocheng/796/2fa7adc0c6564d3f84e2a357d3fbddcb.jpg)
不是数学专业或cs专业,我只是愚弄python(通常为视频游戏制作模拟/理论制作的脚本),我发现random.randint是多么糟糕的表现.这让我想知道为什么random.randint或random.randrange被使用/制作他们的方式.我创建了一个函数,用于生成(用于所有意图和实际目的)与random.randint相同的结果:
big_bleeping_float= (2**64 - 2)/(2**64 - 2)
def fastrandint(start, stop):
return start + int(random.random() * (stop - start + big_bleeping_float))
与random.randrange(0,66)相比,使用它可以产生大幅度180%的速度提升,以产生0-65范围内的整数,这是下一个最快的方法.
>>> timeit.timeit('random.randint(0, 66)', setup='from numpy import random', number=10000)
0.03165552873121058
>>> timeit.timeit('random.randint(0, 65)', setup='import random', number=10000)
0.022374771118336412
>>> timeit.timeit('random.randrange(0, 66)', setup='import random', number=10000)
0.01937231027605435
>>> timeit.timeit('fastrandint(0, 65)', setup='import random; from fasterthanrandomrandom import fastrandint', number=10000)
0.0067909916844523755
此外,这个函数作为random.choice的替代品的调整速度提高了75%,我确信添加大于一个步进范围会更快(尽管我没有测试).使用fastrandint函数几乎可以将速度提升一倍,您可以简单地将其写入内联:
>>> timeit.timeit('int(random.random() * (65 + big_bleeping_float))', setup='import random; big_bleeping_float= (2**64 - 2)/(2**64 - 2)', number=10000)
0.0037642723021917845
总而言之,为什么我错了我的功能更好,为什么它更快更好,并且有更快的方式来做我正在做的事情?
解决方法:
randint调用randrange,它执行一系列范围/类型检查和转换,然后使用_randbelow生成随机int. _randbelow再次进行一些范围检查,最后使用random.
因此,如果删除边缘情况的所有检查和一些函数调用开销,那么fastrandint更快就不足为奇了.
内容总结
以上是互联网集市为您收集整理的python – 为什么生成随机整数的“常规”方法如此之慢?全部内容,希望文章能够帮你解决python – 为什么生成随机整数的“常规”方法如此之慢?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。