#### Previous topic

scipy.stats.invwishart

#### Next topic

scipy.stats.special_ortho_group

# scipy.stats.multinomial

`scipy.stats.``multinomial` = <scipy.stats._multivariate.multinomial_gen object>

  A multinomial random variable.

  Parameters:

  x : array_like

  > Quantiles, with the last axis of x denoting the components.

  n : int

  > Number of trials

  p : array_like

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

  random_state : None or int or np.random.RandomState instance, optional

  > If int or RandomState, use it for drawing the random variates. If None (or np.random), the global np.random state is used. Default is None.

  See also

  `scipy.stats.binom`
    The binomial distribution.
  `numpy.random.multinomial`
    Sampling from the multinomial distribution.

  Notes

  n should be a positive 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.

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

  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\).

  New in version 0.19.0.

  Examples

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

  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])
      0.29030399999999973
      >>> binom.pmf(3, 7, 0.4)
      0.29030400000000012

  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])
      0.2268945
      >>> multinomial.pmf([3, 5], 8, p=[.3, .7])
      0.25412184

  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])`.

  Methods

  `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.