numpy - 给定一个数字,找到与它相加的数字,模糊权重

时间:2016-05-23 01:58:06

标签: python numpy

假设您有一个想要代表总数的数字 - 让我们说它是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)

但这似乎并不优雅。

有更好的方法吗?

1 个答案:

答案 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参数。