# scipy.stats.multinomial

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

  A multinomial random variable.

  Parameters:
    n int

      Number of trials

    p array_like

      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

  `scipy.stats.binom`

    The binomial distribution.

  `numpy.random.Generator.multinomial`

    Sampling from the multinomial distribution.

  `scipy.stats.multivariate_hypergeom`

    The multivariate hypergeometric distribution.

  Notes

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

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

  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.

  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.