在范围之间生成随机浮点数组

时间:2014-02-27 14:50:23

标签: python arrays random numpy

我无法找到一个函数来生成一定范围内给定长度的随机浮点数组。

我看过Random sampling,但似乎没有任何功能可以满足我的需要。

random.uniform接近但它只返回一个元素,而不是特定的数字。

这就是我所追求的:

ran_floats = some_function(low=0.5, high=13.3, size=50)

将返回一个由50个随机非唯一浮点数组成的数组(即允许重复),均匀分布在[0.5, 13.3]范围内。

有这样的功能吗?

9 个答案:

答案 0 :(得分:72)

np.random.uniform符合您的使用案例: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html

sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))

答案 1 :(得分:12)

为什么不使用列表理解?

ran_floats = [random.uniform(low,high) for _ in xrange(size)]

答案 2 :(得分:3)

为什么不将random.uniform与列表理解相结合?

>>> def random_floats(low, high, size):
...    return [random.uniform(low, high) for _ in xrange(size)]
... 
>>> random_floats(0.5, 2.8, 5)
[2.366910411506704, 1.878800401620107, 1.0145196974227986, 2.332600336488709, 1.945869474662082]

答案 3 :(得分:3)

列表理解中的for循环需要时间并使其变慢。 最好使用numpy参数(低,高,大小,..等)

import numpy as np
import time
rang = 10000
tic = time.time()
for i in range(rang):
    sampl = np.random.uniform(low=0, high=2, size=(182))
print("it took: ", time.time() - tic)

tic = time.time()
for i in range(rang):
    ran_floats = [np.random.uniform(0,2) for _ in range(182)]
print("it took: ", time.time() - tic)

示例输出:

('花了:',0.06406784057617188)

('花了:',1.7253198623657227)

答案 4 :(得分:2)

可能已经有了一个功能来做你正在寻找的东西,但我不知道它(但是?)。 与此同时,我会建议使用:

ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5

这将产生一个形状(50,)的阵列,其均匀分布在0.5和13.3之间。

您还可以定义一个函数:

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

编辑:嗯,是的,所以我错过了,有numpy.random.uniform()与您想要的完全相同的电话! 请尝试import numpy; help(numpy.random.uniform)了解详情。

答案 5 :(得分:1)

这是最简单的方式

np.random.uniform(start,stop,(rows,columns))

答案 6 :(得分:1)

或者,您可以使用SciPy

from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)

对于记录要采样整数的记录,

stats.randint(10, 20).rvs(50)

答案 7 :(得分:0)

或者,如果您可以使用实数列表,则可以使用标准的 random.randrange

def some_function(low, high, size):
    low_int = int(low * 1000)
    high_int = int(high *1000)
    return [random.randrange(low_int, high_int, size)/1000 for _ in range(size)]

答案 8 :(得分:-1)

np.random.random_sample(size)将在半开间隔[0.0,1.0)中生成随机浮点数。