Just want to generate random number in a range (no matter float or integer) by using Python. Since I only need to get a random number in my code once a time, the speed for calling the generating-function is critical.

So let’s do the experiment:

import random
import time
import numpy as np
begin = time.time()
for i in range(10000):
random.uniform(1, 100)
print('time:', time.time() - begin)
begin = time.time()
for i in range(10000):
random.randrange(1, 100)
print('time:', time.time() - begin)
begin = time.time()
for i in range(10000):
np.random.uniform(1, 100)
print('time:', time.time() - begin)

The result is:

time: 0.0025768280029296875
time: 0.00877070426940918
time: 0.022496461868286133

Looks the **random.uniform()** from standard library of Python3 is the fastest one. But there is still a odd phenomenon: numpy is as fast as we expected.

Actually, the correct way of using **numpy.random.uniform()** is setting its **size** argument.

begin = time.time()
for i in range(10000):
np.random.uniform(1, 100)
print('time:', time.time() - begin)
begin = time.time()
np.random.uniform(1, 100, 10000)
print('time:', time.time() - begin)

The result is:

time: 0.022496461868286133
time: 0.00012969970703125

Thus the best way to generating a bunch of random numbers at a time is **numpy.random.uniform()**