我需要在 python 3.x 中生成大量伪随机整数。
因此,我必须找到最快的方法。
目前我正在使用 python random
库。
我在 Fastest Way to generate 1,000,000+ random numbers in python 使用 numpy
找到了类似的答案但是 numpy 不是标准库,我不想添加第 3 方库(如果不是真的需要的话),因为我不能确定我提供给它的人是否安装了它们。
实际代码
def randInt(self, size=20, amount=1000):
retVal = list()
for i in range(0, amount):
retVal.append(random.Random._randbelow(size)+1) #+1 to exclude 0 and include size
return retVal
测试:
start = time.time()
test = randInt(size=100, amount=1000000)
stop = time.time()
print(stop-start)
我测试过的这些随机
函数:
_randbelow : 1.6700019 sec
randrange : 2.8700041 sec
randint : 3.1200051 sec
所以我的问题是:
有没有比 _randbelow
使用 python 3.x 默认库更快的方法?
谢谢
寒意0r
编辑
Inbar Roses 建议使用相同方法测试(比较结果)
uniform : 0.9200019 sec
uniform parsed to int : 1.24000 sec
对于我来说,100 万个整数需要 1.24 秒。
如果以后出现问题,我可能不得不研究多线程或真正使用 numpy
。
最佳答案
我已经为你定时了一些随机函数:
>>> import timeit
>>> timeit.Timer('random.randint(0,10)', 'import random').repeat()
[2.4119170746830494, 2.3879981728693105, 2.3901411990453427]
>>> timeit.Timer('random.randrange(0,10)', 'import random').repeat()
[2.274937673930552, 2.178254943434162, 2.1761346646683215]
>>> timeit.Timer('r._randbelow(10)', 'import random; r = random.Random()').repeat()
[1.115751664321607, 1.0852712353494667, 1.0842890608805078]
>>> timeit.Timer('random.uniform(0,10)', 'import random').repeat()
[0.5058132474312629, 0.4609362760654676, 0.4719052973948692]
看起来制服
是你最好的选择。
关于python - 随机数生成 python 3.x 默认库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172516/