# [Numpy-discussion] np.random.multinomial weird results

josef.pktd@gmai... josef.pktd@gmai...
Sat Mar 7 17:29:50 CST 2009

```np.random.multinomial  looks weird. Are these bugs, or is there
something not correct with the explanation.

Josef

from the help/ docstring:

>>> np.random.multinomial(20, [1/6.]*6, size=2)
array([[3, 4, 3, 3, 4, 3],
[2, 4, 3, 4, 0, 7]])
For the first run, we threw 3 times 1, 4 times 2, etc. For the second,
we threw 2 times 1, 4 times 2, etc.

Note: we also get a 7 in a six sided dice

some more examples with a funny shaped six sided dice:

>>> rvsmn=np.random.multinomial(20, [1/6.]*6, size=2000)
>>> for i in range(rvsmn.min(),rvsmn.max()+1):print i, (rvsmn==i).sum(0)/20.0

0 [ 2.9   2.25  2.45  2.55  2.65  2.85]
1 [  9.15   9.75  10.8   11.4   11.1   10.7 ]
2 [ 20.8   20.    20.25  19.65  18.9   19.2 ]
3 [ 23.75  24.4   23.3   22.75  23.5   23.15]
4 [ 20.85  20.8   20.4   20.95  20.15  19.25]
5 [ 12.6   12.55  12.6   12.55  13.3   14.75]
6 [ 6.4   6.65  6.95  6.55  6.8   6.35]
7 [ 2.8   2.25  2.45  2.8   2.55  2.75]
8 [ 0.5   0.85  0.55  0.55  0.85  0.85]
9 [ 0.2   0.4   0.15  0.1   0.15  0.05]
10 [ 0.05  0.1   0.1   0.1   0.05  0.1 ]
11 [ 0.    0.    0.    0.05  0.    0.  ]
>>> rvsmn=np.random.multinomial(1, [1/6.]*6, size=2000)
>>> for i in range(rvsmn.min(),rvsmn.max()+1):print i, (rvsmn==i).sum(0)/20.0

0 [ 81.9   83.35  84.85  84.25  83.7   81.95]
1 [ 18.1   16.65  15.15  15.75  16.3   18.05]
>>> rvsmn=np.random.multinomial(2, [1/6.]*6, size=2000)
>>> for i in range(rvsmn.min(),rvsmn.max()+1):print i, (rvsmn==i).sum(0)/20.0

0 [ 70.45  71.6   68.9   68.1   68.    69.75]
1 [ 26.45  26.1   28.35  28.75  29.6   27.15]
2 [ 3.1   2.3   2.75  3.15  2.4   3.1 ]

>>> rvsmn=np.random.multinomial(2000, [1/6.]*6, size=1)
>>> rvsmn.shape
(1, 6)
>>> rvsmn
array([[330, 348, 332, 326, 337, 327]])
>>> rvsmn=np.random.multinomial(2000, [1/6.]*6)
>>> rvsmn.shape
(6,)
>>> rvsmn
array([334, 322, 323, 348, 322, 351])

Note: this are the tests for multinomial
class TestMultinomial(TestCase):
def test_basic(self):
random.multinomial(100, [0.2, 0.8])

def test_zero_probability(self):
random.multinomial(100, [0.2, 0.8, 0.0, 0.0, 0.0])
```