scipy.stats.multivariate_normal#

scipy.stats.multivariate_normal = object>[источник]#

Многомерная нормальная случайная величина.

The mean ключевое слово указывает среднее значение. Параметр cov ключевое слово указывает ковариационную матрицу.

Параметры:
meanarray_like, default: [0]

Среднее распределения.

covarray_like или Covariance, по умолчанию: [1]

Симметричная положительно (полу)определенная ковариационная матрица распределения.

allow_singularbool, по умолчанию: False

Разрешать ли сингулярную ковариационную матрицу. Это игнорируется, если cov is a Covariance объект.

seed{None, int, np.random.RandomState, np.random.Generator}, опционально

Используется для генерации случайных величин. Если seed является None, RandomState используется синглтон. Если seed является int, новый RandomState используется экземпляр, инициализированный с seed. Если seed уже является RandomState или Generator экземпляр, то этот объект используется. По умолчанию None.

Методы

pdf(x, mean=None, cov=1, allow_singular=False)

Функция плотности вероятности.

logpdf(x, mean=None, cov=1, allow_singular=False)

Логарифм функции плотности вероятности.

cdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5, lower_limit=None)

Интегральная функция распределения.

logcdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5)

Логарифм функции кумулятивного распределения.

rvs(mean=None, cov=1, size=1, random_state=None)

Сгенерировать случайные выборки из многомерного нормального распределения.

entropy(mean=None, cov=1)

Вычислить дифференциальную энтропию многомерного нормального распределения.

fit(x, fix_mean=None, fix_cov=None)

Подгонка многомерного нормального распределения к данным.

Примечания

Установка параметра mean to None эквивалентно наличию mean будет нулевым вектором. Параметр cov может быть скаляром, в этом случае ковариационная матрица является единичной, умноженной на это значение, вектором диагональных элементов ковариационной матрицы, двумерным array_like, или Covariance объект.

Ковариационная матрица cov может быть экземпляром подкласса Covariance, например, scipy.stats.CovViaPrecision. Если так, allow_singular игнорируется.

В противном случае, cov должна быть симметричной положительно полуопределённой матрицей, когда allow_singular равно True; она должна быть (строго) положительно определённой, когда allow_singular is False. Симметрия не проверяется; используется только нижняя треугольная часть. Определитель и обратная матрица cov вычисляются как псевдоопределитель и псевдообратная матрица соответственно, так что cov не обязательно иметь полный ранг.

Функция плотности вероятности для multivariate_normal является

\[f(x) = \frac{1}{\sqrt{(2 \pi)^k \det \Sigma}} \exp\left( -\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu) \right),\]

где \(\mu\) это среднее значение, \(\Sigma\) ковариационная матрица, \(k\) ранг \(\Sigma\). В случае сингулярной \(\Sigma\), SciPy расширяет это определение согласно [1].

Добавлено в версии 0.14.0.

Ссылки

[1]

Многомерное нормальное распределение - вырожденный случай, Википедия, https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Degenerate_case

Примеры

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import multivariate_normal
>>> x = np.linspace(0, 5, 10, endpoint=False)
>>> y = multivariate_normal.pdf(x, mean=2.5, cov=0.5); y
array([ 0.00108914,  0.01033349,  0.05946514,  0.20755375,  0.43939129,
        0.56418958,  0.43939129,  0.20755375,  0.05946514,  0.01033349])
>>> fig1 = plt.figure()
>>> ax = fig1.add_subplot(111)
>>> ax.plot(x, y)
>>> plt.show()
../../_images/scipy-stats-multivariate_normal-1_00_00.png

Альтернативно, объект может быть вызван (как функция) для фиксации параметров среднего значения и ковариации, возвращая "замороженную" многомерную нормальную случайную величину:

>>> rv = multivariate_normal(mean=None, cov=1, allow_singular=False)
>>> # Frozen object with the same methods but holding the given
>>> # mean and covariance fixed.

Входные квантили могут иметь любую форму массива, если последняя ось обозначает компоненты. Это позволяет, например, отобразить замороженную плотность вероятности для неизотропной случайной величины в 2D следующим образом:

>>> x, y = np.mgrid[-1:1:.01, -1:1:.01]
>>> pos = np.dstack((x, y))
>>> rv = multivariate_normal([0.5, -0.2], [[2.0, 0.3], [0.3, 0.5]])
>>> fig2 = plt.figure()
>>> ax2 = fig2.add_subplot(111)
>>> ax2.contourf(x, y, rv.pdf(pos))
../../_images/scipy-stats-multivariate_normal-1_01_00.png