2015-10-03 38 views
0

我跑下列行:为什么这个numpy multinominal方法运行时没有任何错误?

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

和它产生一个输出

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

这意味着当我摇10次6点的骰子中,上述输出代表数的频率计数某一方出现的次数。在这里,第一面出现了3次,第二面出现了4次,依此类推。

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

回答

1

文档说:

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

1

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

相关问题