scipy.stats.matrix_normal#

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

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

The mean ключевое слово указывает среднее значение. Параметр rowcov ключевое слово указывает ковариационную матрицу между строками. Ключевое слово ‘colcov’ указывает ковариационную матрицу между столбцами.

Параметры:
meanarray_like, необязательный

Среднее распределения (по умолчанию: None)

rowcovarray_like, необязательный

Межстрочная ковариационная матрица распределения (по умолчанию: 1)

colcovarray_like, необязательный

Межстолбцовая ковариационная матрица распределения (по умолчанию: 1)

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

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

Методы

pdf(X, mean=None, rowcov=1, colcov=1)

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

logpdf(X, mean=None, rowcov=1, colcov=1)

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

rvs(mean=None, rowcov=1, colcov=1, size=1, random_state=None)

Генерировать случайные выборки.

entropy(rowcol=1, colcov=1)

Дифференциальная энтропия.

Примечания

Если mean установлено в None то для среднего используется матрица нулей. Размеры этой матрицы выводятся из формы rowcov и colcov, если они предоставлены, или установить в 1 если неоднозначно.

rowcov и colcov могут быть двумерными array_likes, задающими ковариационные матрицы напрямую. Альтернативно, одномерный массив будет интерпретироваться как элементы диагональной матрицы, а скаляр или нульмерный массив — как это значение, умноженное на единичную матрицу.

Ковариационные матрицы, заданные rowcov и colcov должна быть (симметричной) положительно определенной. Если выборки в X являются \(m \times n\), затем rowcov должен быть \(m \times m\) и colcov должен быть \(n \times n\). mean должен иметь ту же форму, что и X.

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

\[f(X) = (2 \pi)^{-\frac{mn}{2}}|U|^{-\frac{n}{2}} |V|^{-\frac{m}{2}} \exp\left( -\frac{1}{2} \mathrm{Tr}\left[ U^{-1} (X-M) V^{-1} (X-M)^T \right] \right),\]

где \(M\) это среднее значение, \(U\) ковариационную матрицу между строками, \(V\) ковариационная матрица между столбцами.

The allow_singular поведение multivariate_normal распределение в настоящее время не поддерживается. Ковариационные матрицы должны быть полного ранга.

The matrix_normal распределение тесно связано с multivariate_normal распределение. В частности, \(\mathrm{Vec}(X)\) (вектор, образованный конкатенацией столбцов \(X\)) имеет многомерное нормальное распределение со средним \(\mathrm{Vec}(M)\) и ковариация \(V \otimes U\) (где \(\otimes\) является произведением Кронекера). Выборка и вычисление плотности вероятности \(\mathcal{O}(m^3 + n^3 + m^2 n + m n^2)\) для матричного нормального, но \(\mathcal{O}(m^3 n^3)\) для эквивалентного многомерного нормального распределения, что делает эту эквивалентную форму алгоритмически неэффективной.

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

Примеры

>>> import numpy as np
>>> from scipy.stats import matrix_normal
>>> M = np.arange(6).reshape(3,2); M
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> U = np.diag([1,2,3]); U
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])
>>> V = 0.3*np.identity(2); V
array([[ 0.3,  0. ],
       [ 0. ,  0.3]])
>>> X = M + 0.1; X
array([[ 0.1,  1.1],
       [ 2.1,  3.1],
       [ 4.1,  5.1]])
>>> matrix_normal.pdf(X, mean=M, rowcov=U, colcov=V)
0.023410202050005054
>>> # Equivalent multivariate normal
>>> from scipy.stats import multivariate_normal
>>> vectorised_X = X.T.flatten()
>>> equiv_mean = M.T.flatten()
>>> equiv_cov = np.kron(V,U)
>>> multivariate_normal.pdf(vectorised_X, mean=equiv_mean, cov=equiv_cov)
0.023410202050005054

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

>>> rv = matrix_normal(mean=None, rowcov=1, colcov=1)
>>> # Frozen object with the same methods but holding the given
>>> # mean and covariance fixed.