Generate random array of floats between a range
Solution 1
np.random.uniform
fits your use case:
sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))
Update Oct 2019:
While the syntax is still supported, it looks like the API changed with NumPy 1.17 to support greater control over the random number generator. Going forward the API has changed and you should look at https://docs.scipy.org/doc/numpy/reference/random/generated/numpy.random.Generator.uniform.html
The enhancement proposal is here: https://numpy.org/neps/nep-0019-rng-policy.html
Solution 2
Why not use a list comprehension?
In Python 2
ran_floats = [random.uniform(low,high) for _ in xrange(size)]
In Python 3, range
works like xrange
(ref)
ran_floats = [random.uniform(low,high) for _ in range(size)]
Solution 3
This is the simplest way
np.random.uniform(start,stop,(rows,columns))
Solution 4
Alternatively you could use SciPy
from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)
and for the record to sample integers it's
stats.randint(10, 20).rvs(50)
Solution 5
There may already be a function to do what you're looking for, but I don't know about it (yet?). In the meantime, I would suggess using:
ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5
This will produce an array of shape (50,) with a uniform distribution between 0.5 and 13.3.
You could also define a function:
def random_uniform_range(shape=[1,],low=0,high=1):
"""
Random uniform range
Produces a random uniform distribution of specified shape, with arbitrary max and
min values. Default shape is [1], and default range is [0,1].
"""
return numpy.random.rand(shape) * (high - min) + min
EDIT: Hmm, yeah, so I missed it, there is numpy.random.uniform() with the same exact call you want!
Try import numpy; help(numpy.random.uniform)
for more information.
Gabriel
Updated on July 08, 2022Comments
-
Gabriel almost 2 years
I haven't been able to find a function to generate an array of random floats of a given length between a certain range.
I've looked at Random sampling but no function seems to do what I need.
random.uniform comes close but it only returns a single element, not a specific number.
This is what I'm after:
ran_floats = some_function(low=0.5, high=13.3, size=50)
which would return an array of 50 random non-unique floats (ie: repetitions are allowed) uniformly distributed in the range
[0.5, 13.3]
.Is there such a function?
-
Saravanabalagi Ramachandran over 6 yearsOP's intuitive search question is
some_function(low=0.5, high=13.3, size=50)
. That's how well python libs are designed #wow -
vlad over 4 yearsSize was not completely clear and link does not work. Here is a minor clarification. size: int or tuple of ints, optional. Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn. If size is None default), a single value is returned if low and high are both scalars.
-
JoshAdel over 4 years@vlad - thanks for pointing out the issue with the link. I've updated the answer to hopefully cover the current usage.
-
Loich over 2 yearsIn the official documentation of Numpy, the following function resolves the problem. numpy.org/doc/stable/reference/random/generated/…