生成n个随机变量,其总和为1

时间:2016-03-10 22:22:52

标签: python

我正在尝试生成一个列表,其中包含一些数字,其总和将为1.我正在尝试的代码是:

listA = np.zeros(3)    
while(sum(listA) != 1):
        listA = container(np.random.rand() for _ in range(n))

然而,这一直在持续运行。条件是:数字必须为0或正数。有没有简单的方法来做到这一点?谢谢。

3 个答案:

答案 0 :(得分:3)

此:

listA = [np.random.rand() for _ in range(3)]
scale = sum(listA)
listA = [i / scale for i in listA]

答案 1 :(得分:0)

也许这就够了:

a = np.random.rand()
b = np.random.rand()
while a+b >= 1.0:
    b= np.random.rand()
c = 1.0 - a - b

listA = np.array([a,b,c])

答案 2 :(得分:0)

创建(n-1)0到1之间的随机浮点数。对它们进行排序。计算1到最高,最高和第二高之间的间隔,依此类推。所有间隔总和相等1.有n个这样的间隔(最低的间隔为0等于最低值)。

更新:我是唯一一个看到上述缩放方法存在严重问题的人吗?