Skip to main content
`Ctrl`+`K`
scipy.stats.

# Normal

class scipy.stats.Normal(mu=None, sigma=None, **kwargs)

  Normal distribution with prescribed mean and standard deviation.

  The probability density function of the normal distribution is:

  \[f(x) = \frac{1}{\sigma \sqrt{2 \pi}} \exp { \left( -\frac{1}{2}\left( \frac{x - \mu}{\sigma} \right)^2 \right)}\]

  for \(x \in (-\infty, \infty)\). This class accepts one parameterization: `mu` for \(\mu \in (-\infty, \infty)\), `sigma` for \(\sigma \in (0, \infty)\).

  Parameters:
    tol positive float, optional

      The desired relative tolerance of calculations. Left unspecified, calculations may be faster; when provided, calculations may be more likely to meet the desired accuracy.

    validation_policy{None, “skip_all”}

      Specifies the level of input validation to perform. Left unspecified, input validation is performed to ensure appropriate behavior in edge case (e.g. parameters out of domain, argument outside of distribution support, etc.) and improve consistency of output dtype, shape, etc. Pass `'skip_all'` to avoid the computational overhead of these checks when rough edges are acceptable.

    cache_policy{None, “no_cache”}

      Specifies the extent to which intermediate results are cached. Left unspecified, intermediate results of some calculations (e.g. distribution support, moments, etc.) are cached to improve performance of future calculations. Pass `'no_cache'` to reduce memory reserved by the class instance.

  Attributes:
    All parameters are available as attributes.

  Methods

  `support`() | Support of the random variable
  `plot`([x, y, t, ax]) | Plot a function of the distribution.
  `sample`([shape, method, rng]) | Random sample from the distribution.
  `moment`([order, kind, method]) | Raw, central, or standard moment of positive integer order.
  `mean`(*[, method]) | Mean (raw first moment about the origin)
  `median`(*[, method]) | Median (50th percentile)
  `mode`(*[, method]) | Mode (most likely value)
  `variance`(*[, method]) | Variance (central second moment)
  `standard_deviation`(*[, method]) | Standard deviation (square root of the second central moment)
  `skewness`(*[, method]) | Skewness (standardized third moment)
  `kurtosis`(*[, method, convention]) | Kurtosis (standardized fourth moment)
  `pdf`(x, /, *[, method]) | Probability density function
  `logpdf`(x, /, *[, method]) | Log of the probability density function
  `cdf`(x[, y, method]) | Cumulative distribution function
  `icdf`(p, /, *[, method]) | Inverse of the cumulative distribution function.
  `ccdf`(x[, y, method]) | Complementary cumulative distribution function
  `iccdf`(p, /, *[, method]) | Inverse complementary cumulative distribution function.
  `logcdf`(x[, y, method]) | Log of the cumulative distribution function
  `ilogcdf`(logp, /, *[, method]) | Inverse of the logarithm of the cumulative distribution function.
  `logccdf`(x[, y, method]) | Log of the complementary cumulative distribution function
  `ilogccdf`(logp, /, *[, method]) | Inverse of the log of the complementary cumulative distribution function.
  `entropy`(*[, method]) | Differential entropy
  `logentropy`(*[, method]) | Logarithm of the differential entropy

  See also

  Random Variable Transition Guide

    Tutorial

  Notes

  The following abbreviations are used throughout the documentation.

  - PDF: probability density function

  - CDF: cumulative distribution function

  - CCDF: complementary CDF

  - entropy: differential entropy

  - log-F: logarithm of F (e.g. log-CDF)

  - inverse F: inverse function of F (e.g. inverse CDF)

  The API documentation is written to describe the API, not to serve as a statistical reference. Effort is made to be correct at the level required to use the functionality, not to be mathematically rigorous. For example, continuity and differentiability may be implicitly assumed. For precise mathematical definitions, consult your preferred mathematical text.

  Examples

  To use the distribution class, it must be instantiated using keyword parameters corresponding with one of the accepted parameterizations.

      >>> import numpy as np
      >>> import matplotlib.pyplot as plt
      >>> from scipy import stats
      >>> from scipy.stats import Normal
      >>> X = Normal(mu=-0.81, sigma=0.69)

  For convenience, the `plot` method can be used to visualize the density and other functions of the distribution.

      >>> X.plot()
      >>> plt.show()

  The support of the underlying distribution is available using the `support` method.

      >>> X.support()
      (np.float64(-inf), np.float64(inf))

  The numerical values of parameters associated with all parameterizations are available as attributes.

      >>> X.mu, X.sigma
      (np.float64(-0.81), np.float64(0.69))

  To evaluate the probability density/mass function of the underlying distribution at argument `x=-1.13`:

      >>> x = -1.13
      >>> X.pdf(x), X.pmf(x)
      (np.float64(0.5192263911374636), np.float64(0.0))

  The cumulative distribution function, its complement, and the logarithm of these functions are evaluated similarly.

      >>> np.allclose(np.exp(X.logccdf(x)), 1 - X.cdf(x))
      True

  The inverse of these functions with respect to the argument `x` is also available.

      >>> logp = np.log(1 - X.ccdf(x))
      >>> np.allclose(X.ilogcdf(logp), x)
      True

  Note that distribution functions and their logarithms also have two-argument versions for working with the probability mass between two arguments. The result tends to be more accurate than the naive implementation because it avoids subtractive cancellation.

      >>> y = -0.56
      >>> np.allclose(X.ccdf(x, y), 1 - (X.cdf(y) - X.cdf(x)))
      True

  There are methods for computing measures of central tendency, dispersion, higher moments, and entropy.

      >>> X.mean(), X.median(), X.mode()
      (np.float64(-0.81), np.float64(-0.81), np.float64(-0.81))

      >>> X.variance(), X.standard_deviation()
      (np.float64(0.4760999999999999), np.float64(0.69))

      >>> X.skewness(), X.kurtosis()
      (np.float64(0.0), np.float64(3.0))

      >>> np.allclose(X.moment(order=6, kind='standardized'),
      ...             X.moment(order=6, kind='central') / X.variance()**3)
      True

      >>> np.allclose(np.exp(X.logentropy()), X.entropy())
      True

  Pseudo-random samples can be drawn from the underlying distribution using `sample`.

      >>> X.sample(shape=(4,))
      array([-0.73348912, -1.05738815, -1.18872327, -0.48443655])  # may vary