为什么这个 numpy 多项式方法 运行 没有任何错误?

Why does this numpy multinominal method run without any error?

我运行以下行:

np.random.multinomial(10, [1/5., 1/5., 1/5., 1/5., 1/5., 1/5.])

它产生一个输出

array([3, 4, 0, 0, 3, 0])

这意味着当我掷一个 6 面骰子 10 次时,上面的输出表示特定面出现的次数的频率计数。在这里,side 1 出现了 3 次,side 2 出现了 4 次等等。

我的问题是上面的方法不应该因为骰子边的概率值之和 > 1/0 而抛出错误吗?我确定我在这里误解了一些东西,但无法弄清楚是什么。

文档说:

pvals : sequence of floats, length p
    Probabilities of each of the ``p`` different outcomes.  These
    should sum to 1 (however, the last element is always assumed to
    account for the remaining probability, as long as
    ``sum(pvals[:-1]) <= 1)``.

也就是说最后一个元素被赋值为0的概率 运行 这个:

sum_last = 0

for trial in np.arange(20):
    sum_last += np.random.multinomial(10, [1/5., 1/5., 1/5., 1/5., 1/5., 1/5.])[-1]
print sum_last

你会看到最后一个元素永远不会出现,概率确实是0

实际上代码只会考虑直到 pvals 总和为 1。所以在这种情况下只有前五个总和。因此,无论您 运行 多少次,数组中的第 6 个元素都将为零。因此,如果您为所有 6 个元素都给出 1/3,它将执行,就像抛出第 3 面的骰子一样,并且在输出数组中,最后 3 个元素将为零。它不必显示错误。一旦总和达到一个就会停止,而忽略其他的。这就是语法。 希望这有帮助。