Python 如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数?

Python 如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数?,python,numpy,Python,Numpy,如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数 我做了如下尝试: np.random.uniform(5.0,9.0) ans = [5.5, 6.0, 8.5] 但它不包括“步骤”参数 编辑: Python random.range提供了使用“步骤”的方法。但它只适用于整数 random.randrange(start, stop[, step]) 我想得到3个这样的数字: 预期结果如下: np.random.uniform(5.0,9.0) ans = [

如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数

我做了如下尝试:

np.random.uniform(5.0,9.0) 
ans = [5.5, 6.0, 8.5]
但它不包括“步骤”参数

编辑: Python random.range提供了使用“步骤”的方法。但它只适用于整数

random.randrange(start, stop[, step])
我想得到3个这样的数字:

预期结果如下:

np.random.uniform(5.0,9.0) 
ans = [5.5, 6.0, 8.5]
这应该做到:

0.5 * floor(2.0 * np.random.uniform(5.0, 9.0))
希望这对你有帮助。

val = np.random.randint(2*5,2*9)/2.
randint返回一个范围为[10,18]的均匀分布整数,然后进行浮点除以2。这样做的好处是速度相当快:

In [120]: %timeit np.random.randint(2*5,2*9)/2.
1000000 loops, best of 3: 329 ns per loop

In [121]: %timeit 0.5 * ceil(2.0 * np.random.uniform(5.0, 9.0))
100000 loops, best of 3: 4.61 µs per loop
要使其更通用,请执行以下操作:

def rand_with_step(low,high,step,count=1,bias=False):
    n = 1/step
    if count > 1:
        val = np.random.randint(low*n,high*n,count)*step
    else:
        val= np.random.randint(low*n,high*n)*step

    if bias:
        bias = ceil(low/step)*step - low
    else:
        bias = 0
    return val - bias
这里,偏置标志确定是否从低值开始计算步长

例如:

In [190]: rand_with_step(5,9,0.11,1,True)
Out[190]: 7.31
这应该是正确的,因为7.31-5/0.11=29 a阶跃的整数倍

值得注意的是,这种方法比np.random.choice更快,即使有一个预先计算的数字池可以从中提取,尽管我不清楚为什么

In [343]: x = np.arange(5, 9, 0.5)

In [344]: %timeit np.random.choice(x,size=3)
10000 loops, best of 3: 29.7 µs per loop

In [345]: %timeit rand_with_step(5,9,0.5,3,True)
10000 loops, best of 3: 25.3 µs per loop

我可能会使用类似@ebarr的答案,但这里有一个替代方案

使用np.arange创建所需范围,然后使用np.random.choice从该数组中选择:

请注意,如果像这样使用arange,可能的输出中不包括9。如果要包括上限,可以使用np.arange5、9.25、0.5,或者更一般地使用np.arangestart、stop+0.5*步骤、步骤

如果所需的范围很大,而您只选择了几个值,则这不是非常有效。如果您要从同一组数字中重复选择,则可以定义一次可能的值并重用该变量:

In [135]: values = np.arange(5, 9, 0.5)

In [136]: np.random.choice(values, size=3)
Out[136]: array([ 6.5,  5. ,  6. ])

In [137]: np.random.choice(values, size=5)
Out[137]: array([ 6. ,  8. ,  6. ,  7.5,  8. ])

作者必须解释在这种情况下他们所说的“步骤”是什么意思。?用粗体字不能解释。很明显,您希望“步骤”为0.5;但不清楚“步骤”是什么。您的意思是希望返回的唯一值为5.0、5.5、6.0、…、9.0?