Fastest way to get a random number between 1 and 1million in python
实现这一目标的绝对最快方式是什么? 我每天会这样做超过100万次,所以我想要最高效率。
numpy(20次运行后平均值0.0001679009692429128)
1 2 3 4 | t0 = time.clock() print(np.random.randint(1,1000000)) t1 = time.clock() print (t1-t0) |
随机(平均值:0.0000920492372555262)
1 2 3 4 | t2 = time.clock() print(random.choice(range(1,1000000))) t3 = time.clock() print (t3-t2) |
令我惊讶的是,随机性一直比numpy快。 有更快的方法吗?
当生成随机数的大样本(数组)时,
1 2 3 4 5 | In [10]: %timeit np.random.randint(1,1000000, 1000000) 5.14 ms ± 64.1 μs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [11]: %timeit [random.choice(range(1,1000000)) for _ in range(1000000)] 1.01 s ± 14.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) |
另外,请参阅如何使用Pythons timeit计算代码段以测试性能?关于如何进行计时测试。当您使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [12]: repeat = 1000000 ...: t0 = time.clock() ...: for _ in range(repeat): ...: np.random.randint(1, 1000000) ...: t1 = time.clock() ...: print((t1 - t0) / repeat) 1.3564629999999908e-06 In [13]: repeat = 1000000 ...: t2 = time.clock() ...: for _ in range(repeat): ...: random.choice(range(1, 1000000)) ...: t3 = time.clock() ...: print((t3 - t2) / repeat) 1.0206699999999956e-06 |
因此,对于单个数字,
如果使用numpy,使用
我写了一个测试程序。它表明完成任务只需1秒钟。所以只要你想要的任何方式,它就不会成为你的瓶颈。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Xiang Wang @ 2018-05-23 16:49:00 import time import random start = time.time() for i in range(1000000): random.randint(1, 1000000) end = time.time() print("total time: {}".format(end-start)) |