这个问题以前曾被问过,但我从未见过一个好的答案。
我想生成 8 个总和为 0.5 的随机数。
我希望每个数字都是从均匀分布中随机选择的(即,下面的简单函数将不起作用,因为数字不会均匀分布)。
def rand_constrained(n,tot):
r = [random.random() for i in range(n)]
s = sum(r)
r = [(i/s*tot) for i in r]
return r
Run Code Online (Sandbox Code Playgroud)该代码应该是可推广的,以便您可以生成 N 个均匀随机数,其总和为 M(其中 M 是正浮点数)。如果可能的话,您能否解释一下(或用图表示)为什么您的解决方案均匀地在适当的范围内生成随机数?
未达标的相关问题:
生成多个随机数以等于 python 中的值(当前接受的答案不统一 - 另一个统一的答案仅适用于整数)
获取N个随机数,总和为M(Java中的同一问题,当前接受的答案完全错误,也没有均匀分布的答案)
生成 R 中总和为 M 的 N 个随机整数(同样的问题,但在 R 中具有正态(非均匀)分布)
任何帮助是极大的赞赏。