gpt4 book ai didi

python - 随机数生成器的相互矛盾的性能结果

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:12 26 4
gpt4 key购买 nike

来 self 的 question on Code-Review ,对随机数生成库的性能进行了一些分析,特别是 python 和 numpy 的 random 设施。人们会假设在不同的机器上会有一些性能差异,但总体结论是一样的,xy 快。然而,事实并非如此。

Oscar Smith's answer ,他进行了测试,得到了如下结果,在Ubuntu、Python 2.7和3.6、NumPy 1.14.1上运行:

timeit.timeit('rand(0,1000)', setup='from numpy.random import uniform as rand')
0.7485988769913092
timeit.timeit('rand(0,1000)', setup='from random import uniform as rand')
0.2676771300029941

我进行了相同的测试,得到了相反的结果,在 RHEL 7.4、Python 2.7.5、NumPy 1.7.1 上运行:

timeit.timeit("rand(0, 1000)", setup="from numpy.random import uniform as rand")
0.1250929832458496
timeit.timeit("rand(0, 1000)", setup="from random import uniform as rand")
0.47645998001098633

我希望这些值会不同,但比例相同,即他会得到 0.5, 0.1,而我会得到 0.25, 0.05。然而,我们得到了截然相反的结果。这里发生了什么?如果可能的话,官方认为哪个库更快?

一个有趣的旁注,在在线解释器中运行 https://repl.it/languages/python3 ,原生 python 更快:

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux


import timeit
import numpy
numpy.__version__
=> '1.14.1'
timeit.timeit('rand(0,1000)', setup='from numpy.random import uniform as rand')
=> 2.416280833000201
timeit.timeit('rand(0,1000)', setup='from random import uniform as rand')
=> 1.0206557700003032

最佳答案

您使用的是非常旧的 NumPy 版本,NumPy 1.7.1。 numpy.random 从那时起变得更加复杂。

例如,比较 1.14.11.7.1 numpy.random.uniform 的实现,1.14.1 实现涉及一个锁,并做了额外的工作来支持 lowhigh 的类数组. 1.7.1 不这样做。

numpy.random.randint(您在代码审查问题中使用的)也变得更加复杂。比较 1.14.11.7.1实现,1.14.1 实现包括锁、dtype 动态分派(dispatch)和大量使用 Python 级 API,所有这些都会增加每次调用的开销。 1.7.1 的实现更为直接。

关于python - 随机数生成器的相互矛盾的性能结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com