Back to Numpy

Parameters

doc/EXAMPLE_DOCSTRING.rst

2.5.0.dev03.4 KB
Original Source

.. Here follows an example docstring for a C-function. Note that the signature is given. This is done only for functions written is C, since Python cannot find their signature by inspection. For all other functions, start with the one line description.

multivariate_normal(mean, cov[, shape])

Draw samples from a multivariate normal distribution.

The multivariate normal, multinormal or Gaussian distribution is a generalization of the one-dimensional normal distribution to higher dimensions.

Such a distribution is specified by its mean and covariance matrix, which are analogous to the mean (average or "centre") and variance (standard deviation squared or "width") of the one-dimensional normal distribution.

Parameters

mean : (N,) ndarray Mean of the N-dimensional distribution. cov : (N, N) ndarray Covariance matrix of the distribution. shape : tuple of ints, optional Given a shape of, for example, (m, n, k), mnk samples are generated, and packed in an m-by-n-by-k arrangement. Because each sample is N-dimensional, the output shape is (m, n, k, N). If no shape is specified, a single sample is returned.

Returns

out : ndarray The drawn samples, arranged according to shape. If the shape given is (m, n, ...), then the shape of out is (m, n, ... , N).

In other words, each entry ``out[i, j, ... , :]`` is an N-dimensional
value drawn from the distribution.

See also

normal scipy.stats.norm : Provides random variates, as well as probability density function, cumulative density function, etc.

Notes

The mean is a coordinate in N-dimensional space, which represents the location where samples are most likely to be generated. This is analogous to the peak of the bell curve for the one-dimensional or univariate normal distribution.

Covariance indicates the level to which two variables vary together. From the multivariate normal distribution, we draw N-dimensional samples, :math:X = [x_1, x_2, ... , x_N]. The covariance matrix element :math:C_ij is the covariance of :math:x_i and :math:x_j. The element :math:C_ii is the variance of :math:x_i (i.e. its "spread").

Instead of specifying the full covariance matrix, popular approximations include:

  • Spherical covariance (cov is a multiple of the identity matrix)
  • Diagonal covariance (cov has non-negative elements, and only on the diagonal)

This geometrical property can be seen in two dimensions by plotting generated data-points:

mean = [0, 0] cov = [[1, 0], [0, 100]] # diagonal covariance, points lie on x or y-axis x, y = np.random.multivariate_normal(mean, cov, 5000).T

import matplotlib.pyplot as plt plt.plot(x, y, 'x'); plt.axis('equal'); plt.show()

Note that the covariance matrix must be non-negative definite.

References

.. [1] A. Papoulis, "Probability, Random Variables, and Stochastic Processes," 3rd ed., McGraw-Hill Companies, 1991 .. [2] R.O. Duda, P.E. Hart, and D.G. Stork, "Pattern Classification," 2nd ed., Wiley, 2001.

Examples

mean = (1, 2) cov = [[1, 0], [0, 1]] x = np.random.multivariate_normal(mean, cov, (3, 3)) x.shape (3, 3, 2)

The following is probably true, given that 0.6 is roughly twice the standard deviation:

print(list( (x[0, 0, :] - mean) < 0.6 )) [True, True] # may vary

.. index: :refguide: random:distributions