假设您有一个想要代表总数的数字 - 让我们说它是123,456,789。
现在,假设您要生成一些加起来该数字的数字,但模糊权重。
例如,假设我想生成三个数字。第一个应该是总数的60%左右,但有一些小的差异。第二个应该是总数的30%,同样有一些差异。而第三个最终将大约10%,具体取决于其他两个。
我试过这样做:
percentages = [0.6, 0.3]
total = 123456789
still_need = total
values = []
for i in range(2):
x = int(total * (percentages[i] + np.random.normal(scale=0.05)))
values.append(x)
still_need = still_need - x
values.append(still_need)
但这似乎并不优雅。
有更好的方法吗?
答案 0 :(得分:3)
干净的方法是从multinomial distribution
画画total = 123456789
percentages = [0.6, 0.3, 0.1]
values = np.random.multinomial(total, percentages)
在这种情况下,多项分布模型滚动3面模具123456789次,其中每个面朝上的概率为[0.6,0.3,0.1]。致电multinomial()
就像对该实验进行一次试验。它返回3个随机整数,总和为123456789.它们表示模具的每个面都出现的次数。如果您想要多次绘制,可以使用size
参数。