Python 在一个范围内生成随机浮点数数组

Python 在一个范围内生成随机浮点数数组,python,arrays,random,numpy,Python,Arrays,Random,Numpy,我还没有找到一个函数来生成一个给定长度的、在一定范围内的随机浮点数组 我已经看过了,但似乎没有函数能满足我的需要 接近,但它只返回单个元素,而不是特定的数字 这就是我想要的: ran_floats = some_function(low=0.5, high=13.3, size=50) 它将返回一个由50个随机非唯一浮点(即:允许重复)组成的数组,均匀分布在[0.5,13.3]范围内 有这样的功能吗?为什么不使用列表理解 >>> def random_floats(low,

我还没有找到一个函数来生成一个给定长度的、在一定范围内的随机浮点数组

我已经看过了,但似乎没有函数能满足我的需要

接近,但它只返回单个元素,而不是特定的数字

这就是我想要的:

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


有这样的功能吗?

为什么不使用列表理解

>>> 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]
在Python 2中

ran_floats = [random.uniform(low,high) for _ in xrange(size)]
在Python3中,
range
的工作原理类似于
xrange
()

为什么不结合列表理解

>>> 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]

可能已经有了一个函数来完成您想要的任务,但我还不知道(现在还不知道?)。 同时,我将使用以下方法提出建议:

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()和你想要的完全一样! 尝试
导入numpy;帮助(numpy.random.uniform)
了解更多信息。

适合您的用例:

sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))
2019年10月更新:

虽然语法仍然受支持,但看起来API使用NumPy 1.17进行了更改,以支持对随机数生成器的更大控制。展望未来,API已经发生了变化,您应该看看


增强建议如下:

这是最简单的方法

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

列表理解中的for循环需要时间,并且速度较慢。 最好使用numpy参数(低、高、大小等)

样本输出:

(“花费:”,0.06406784057617188)


(“需要:”,1.7253198623657227)

或者您可以使用

对于采样整数的记录,它是

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

np.random.random\u sample(size)
将在半开区间[0.0,1.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)]

您已经标记了问题
numpy
,但是您没有提到
numpy.random.uniform
,即使它正好具有您想要的呼叫签名。您是否有
numpy
库可用?
[random.uniform(低、高)用于xrange(大小)中的i]
@DSM是的,我有,你显然100%正确。我错过了那个功能,它似乎正是我需要的。你介意把你的评论作为答案吗?OP的直观搜索问题是一些函数(低=0.5,高=13.3,大小=50)。这就是python库的设计水平。#wowSize不完全清楚,链接也不起作用。这里有一个小说明。大小:int或int的元组,可选。输出形状。如果给定的形状是,例如,(m,n,k),然后绘制m*n*k个样本。如果“大小”为“无”,则返回单个值(如果“低”和“高”都是标量)。@vlad-感谢您指出链接中的问题。我已更新了答案,希望能涵盖当前的使用情况。
stats.randint(10, 20).rvs(50)
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)]