我可以在不使用模拟的情况下以相同的概率选出 5 个相加等于 10 亿的数字吗?

Ili*_*ing 1 python random statistics performance

你有 5 个选择,你想从这 5 个选择中随机选择。您将如何直接获取每个选择的数字,而不是模拟该选择 10 亿次?

这是模拟:

choices = [0, 0, 0, 0, 0]
for i in range (int(1e9)):
    choices[random.randint(0, 4)] += 1

Run Code Online (Sandbox Code Playgroud)

但这非常慢,我不知道如何获得更快的解决方案。

Sev*_*eux 5

当然,您可以使用分布,通过构造将采样的整数添加到固定总和中。最简单的是多项分布

Python代码(未经测试)

import numpy as np

a = np.random.multinomial(1000000000, [1/5.]*5, size=1)
np.sum(a)
Run Code Online (Sandbox Code Playgroud)

另一种可能是狄利克雷多项分布