我还没有找到一个函数来生成在一定范围内给定长度的随机浮点数组。
我看过随机抽样,但是似乎没有函数可以满足我的需要。
random.uniform接近,但它仅返回单个元素,而不返回特定数字。
这就是我所追求的:
ran_floats = some_function(low=0.5, high=13.3, size=50)
这将返回在range中均匀分布的50个随机非唯一浮点数组(即:允许重复)[0.5, 13.3]
。
有这样的功能吗?
我还没有找到一个函数来生成在一定范围内给定长度的随机浮点数组。
我看过随机抽样,但是似乎没有函数可以满足我的需要。
random.uniform接近,但它仅返回单个元素,而不返回特定数字。
这就是我所追求的:
ran_floats = some_function(low=0.5, high=13.3, size=50)
这将返回在range中均匀分布的50个随机非唯一浮点数组(即:允许重复)[0.5, 13.3]
。
有这样的功能吗?
[random.uniform(low, high) for i in xrange(size)]
Answers:
np.random.uniform
适合您的用例:
sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))
2019年10月更新:
虽然仍支持语法,但看起来API随NumPy 1.17更改了,以支持对随机数生成器的更好控制。前进的API已经更改,您应该查看https://docs.scipy.org/doc/numpy/reference/random/generation/numpy.random.Generator.uniform.html
some_function(low=0.5, high=13.3, size=50)
。这就是python库设计得很好的方式#哇
为什么不将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]
可能已经有一个功能可以满足您的需求,但我还不知道(还好吗?)。同时,我建议使用:
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)
获取更多信息。
列表理解中的for循环会花费一些时间并使它变慢。最好使用numpy参数(低,高,大小,.. etc等)
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)
numpy
,但没有提及numpy.random.uniform
,即使它确实具有所需的呼叫签名。你有numpy
图书馆吗?