37
votes

How can I sample random floats on an interval [a, b] in numpy? Not just integers, but any real numbers. For example,

random_float(5, 10)

would return random numbers between [5, 10]. thanks.

3

3 Answers

67
votes

The uniform distribution would probably do what you are asking.

np.random.uniform(5,10) # A single value
np.random.uniform(5,10,[2,3]) # A 2x3 array
5
votes

without numpy you can do this with the random module.

import random
random.random()*5 + 10

will return numbers in the range 10-15, as a function:

>>> import random
>>> def random_float(low, high):
...     return random.random()*(high-low) + low
...
>>> random_float(5,10)
9.3199502283292208
>>> random_float(5,10)
7.8762002129171185
>>> random_float(5,10)
8.0522023132650808

random.random() returns a float from 0 to 1 (upper bound exclusive). multiplying it by a number gives it a greater range. ex random.random()*5 returns numbers from 0 to 5. Adding a number to this provides a lower bound. random.random()*5 +10 returns numbers from 10 to 15. I'm not sure why you want this to be done using numpy but perhaps I've misunderstood your intent.

4
votes
import numpy as np
>>> 5 + np.random.sample(10) * 5
array([ 7.14292096,  6.84837089,  6.38203972,  8.80365208,  9.06627847,
        5.69871186,  6.37734538,  9.60618347,  9.34319843,  8.63550653])