【发布时间】:2011-08-03 02:48:29
【问题描述】:
在某些代码中,我想在[0,1) 中选择n 随机数,总和为1。
我这样做是通过在[0,1) 中独立选择数字并通过将每个数字除以总和来标准化它们:
numbers = [random() for i in range(n)]
numbers = [n/sum(numbers) for n in numbers]
我的“问题”是,我得到的分布是相当倾斜的。选择一百万个数字而不是一个数字会超过1/2。经过一番努力,我计算出了 pdf,结果并不好。
这是我为 5 个变量得到的看起来很奇怪的 pdf:
您是否有一个好的算法来选择数字,从而产生更均匀或更简单的分布?
【问题讨论】:
-
我不确定我是否理解,如果您将数字 1 分成一百万个随机片段,那么 不应该 超过 0.5 。如果有,那就意味着另外 999,999 必须放在另一半。
-
看看Random Vectors with Fixed Sum。下载链接指向一个包含 MATLAB 代码的文件和一个解释算法的文档。
标签: algorithm math random probability sample