如何在浮点范围之间获得k个不同的随机数?

时间:2018-01-14 09:22:16

标签: python python-3.x random

我已经看过this问题,该问题解释了如何在浮点范围和this之间得到一个随机数,这解释了我如何得到n个不同的整数随机数。

我想要k个唯一的随机数,它们是浮点数,范围也是浮点数。

3 个答案:

答案 0 :(得分:2)

方法1:

import random

def get_rand_array(lower_bound, upper_bound, total_nums):
    rand_set = set()

    while( len(rand_set) < total_nums ):
        rand_set.add( random.uniform(lower_bound, upper_bound) )

    return rand_set

a = get_rand_array(1.0, 1.2, 5)
print( str(a) )

在每次迭代中,生成所需范围内的随机数并将其添加到set,以确保其中的每个元素都是唯一的

方法2:

import random

def get_random_array(lower_limit, upper_limit, total_nums):
    rand_array = []

    while( len(rand_array) < total_nums ):
        current_rand = random.uniform(lower_limit, upper_limit)

        if( current_rand not in rand_array ):
            rand_array.append(current_rand)

    return rand_array

a = get_random_array(3.0, 3.1, 5)
print( str(a) )

不是像方法1中那样使用set,而是在每次迭代中检查current_rand中是否已存在rand_array;如果缺席,请将其附加到rand_array,以确保rand_array中的唯一元素。

答案 1 :(得分:1)

>>> import random
>>> n = 5
>>> a, b = 0., 10.
>>> [random.uniform(a, b) for _ in range(n)]
[1.1617037103617134,
 5.977376104342625,
 7.04027407732932,
 0.10349393354524894,
 2.3731423390045023]

如果您担心唯一性,可以计算找到重复的奇数。它由the following relationship给出:

p(n,d) = 1 - e ** (-n**2/(2*d))

d 2**52n的位置,即要生成的随机数。对于一千个值,概率为1.11e-10。这意味着你成为百万富翁{64}的可能性比在这个列表中找到重复的人高64倍。

答案 2 :(得分:0)

如果你有笨蛋,这会容易得多。

import numpy as np
x=np.random.uniform(1,100,10)
print(x)

[22.31472037 90.3789552  28.4565216  34.79490853 16.48289675 39.15659334
 15.63986831 24.15726628  3.0404023  16.43198165]