1

我想生成一个n概率总和为 1 的概率列表。该列表的大小是固定的,但可以任意大。n可能是111, 2, 10, 14,等。我意识到这100可能是一种计算挑战,可能没有一种最好的方法来做到这一点,但我仍然很乐意接受有关合理方法的建议。

4

2 回答 2

4

我认为最好的方法是生成所需大小的随机数列表,将所有数字相加并将每个数字除以总数:

randlist = [randon.random() for i in range(n)]
total = sum(randlist)
randlist = [i/total for i in randlist]
于 2012-11-27T10:14:28.407 回答
1

与 Smetterleen 类似,但效率可能稍高一些:

import random
def generate(n):
    unnormalised = [random.random() for _ in range(n)]
    s = sum(unnormalised)
    normalised = map(lambda x: x/s, unnormalised)
    return normalised

值得注意的是,这些都不一定会精确到 1

>>> sum(generate(4))
1.0
>>> sum(generate(4))
1.0
>>> sum(generate(4))
1.0000000000000002
>>> sum(generate(4))
0.9999999999999999
>>> sum(generate(4))
1.0
于 2012-11-27T10:21:59.527 回答