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()