scipy.stats.multinomial = <scipy.stats._multivariate.multinomial_gen object>[source]#

A multinomial random variable.


Number of trials


Probability of a trial falling into each category; should sum to 1

seed{None, int, np.random.RandomState, np.random.Generator}, optional

Used for drawing random variates. If seed is None, the RandomState singleton is used. If seed is an int, a new RandomState instance is used, seeded with seed. If seed is already a RandomState or Generator instance, then that object is used. Default is None.

See also


The binomial distribution.


Sampling from the multinomial distribution.


The multivariate hypergeometric distribution.


n should be a nonnegative integer. Each element of p should be in the interval \([0,1]\) and the elements should sum to 1. If they do not sum to 1, the last element of the p array is not used and is replaced with the remaining probability left over from the earlier elements.

The probability mass function for multinomial is

\[f(x) = \frac{n!}{x_1! \cdots x_k!} p_1^{x_1} \cdots p_k^{x_k},\]

supported on \(x=(x_1, \ldots, x_k)\) where each \(x_i\) is a nonnegative integer and their sum is \(n\).

Added in version 0.19.0.


>>> from scipy.stats import multinomial
>>> rv = multinomial(8, [0.3, 0.2, 0.5])
>>> rv.pmf([1, 3, 4])

The multinomial distribution for \(k=2\) is identical to the corresponding binomial distribution (tiny numerical differences notwithstanding):

>>> from scipy.stats import binom
>>> multinomial.pmf([3, 4], n=7, p=[0.4, 0.6])
>>> binom.pmf(3, 7, 0.4)

The functions pmf, logpmf, entropy, and cov support broadcasting, under the convention that the vector parameters (x and p) are interpreted as if each row along the last axis is a single object. For instance:

>>> multinomial.pmf([[3, 4], [3, 5]], n=[7, 8], p=[.3, .7])
array([0.2268945,  0.25412184])

Here, x.shape == (2, 2), n.shape == (2,), and p.shape == (2,), but following the rules mentioned above they behave as if the rows [3, 4] and [3, 5] in x and [.3, .7] in p were a single object, and as if we had x.shape = (2,), n.shape = (2,), and p.shape = (). To obtain the individual elements without broadcasting, we would do this:

>>> multinomial.pmf([3, 4], n=7, p=[.3, .7])
>>> multinomial.pmf([3, 5], 8, p=[.3, .7])

This broadcasting also works for cov, where the output objects are square matrices of size p.shape[-1]. For example:

>>> multinomial.cov([4, 5], [[.3, .7], [.4, .6]])
array([[[ 0.84, -0.84],
        [-0.84,  0.84]],
       [[ 1.2 , -1.2 ],
        [-1.2 ,  1.2 ]]])

In this example, n.shape == (2,) and p.shape == (2, 2), and following the rules above, these broadcast as if p.shape == (2,). Thus the result should also be of shape (2,), but since each output is a \(2 \times 2\) matrix, the result in fact has shape (2, 2, 2), where result[0] is equal to multinomial.cov(n=4, p=[.3, .7]) and result[1] is equal to multinomial.cov(n=5, p=[.4, .6]).

Alternatively, the object may be called (as a function) to fix the n and p parameters, returning a “frozen” multinomial random variable:

>>> rv = multinomial(n=7, p=[.3, .7])
>>> # Frozen object with the same methods but holding the given
>>> # degrees of freedom and scale fixed.


pmf(x, n, p)

Probability mass function.

logpmf(x, n, p)

Log of the probability mass function.

rvs(n, p, size=1, random_state=None)

Draw random samples from a multinomial distribution.

entropy(n, p)

Compute the entropy of the multinomial distribution.

cov(n, p)

Compute the covariance matrix of the multinomial distribution.