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