scipy.stats.matrix_normal#

scipy.stats.matrix_normal = <scipy.stats._multivariate.matrix_normal_gen Objekt>[Quelle]#

Eine Matrix-Normal-Zufallsvariable.

Das Schlüsselwort mean gibt den Mittelwert an. Das Schlüsselwort rowcov gibt die Kovarianzmatrix zwischen den Zeilen an. Das Schlüsselwort ‘colcov’ gibt die Kovarianzmatrix zwischen den Spalten an.

Parameter:
meanarray_like, optional

Mittelwert der Verteilung (Standard: None)

rowcovarray_like, optional

Kovarianzmatrix zwischen den Zeilen der Verteilung (Standard: 1)

colcovarray_like, optional

Kovarianzmatrix zwischen den Spalten der Verteilung (Standard: 1)

seed{None, int, np.random.RandomState, np.random.Generator}, optional

Wird zum Ziehen von Zufallsvarianten verwendet. Wenn seed None ist, wird die RandomState Singleton verwendet. Wenn seed eine Ganzzahl ist, wird eine neue RandomState-Instanz verwendet, die mit seed initialisiert wird. Wenn seed bereits eine RandomState- oder Generator-Instanz ist, wird dieses Objekt verwendet. Standard ist None.

Methoden

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

Wahrscheinlichkeitsdichtefunktion.

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

Logarithmus der Wahrscheinlichkeitsdichtefunktion.

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

Zufällige Stichproben ziehen.

entropy(rowcol=1, colcov=1)

Differenzielle Entropie.

Hinweise

Wenn mean auf None gesetzt ist, wird eine Matrix aus Nullen für den Mittelwert verwendet. Die Dimensionen dieser Matrix werden aus der Form von rowcov und colcov abgeleitet, falls diese angegeben sind, oder auf 1 gesetzt, falls mehrdeutig.

rowcov und colcov können zweidimensionale array_likes sein, die die Kovarianzmatrizen direkt spezifizieren. Alternativ wird ein eindimensionales Array als Einträge einer Diagonalmatrix interpretiert, und ein Skalar oder ein null-dimensionales Array wird als dieser Wert multipliziert mit der Identitätsmatrix interpretiert.

Die durch rowcov und colcov spezifizierten Kovarianzmatrizen müssen (symmetrisch) positiv definit sein. Wenn die Stichproben in X \(m \times n\) sind, dann muss rowcov \(m \times m\) und colcov \(n \times n\) sein. mean muss die gleiche Form wie X haben.

Die Wahrscheinlichkeitsdichtefunktion für matrix_normal ist

\[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),\]

wobei \(M\) der Mittelwert, \(U\) die Kovarianzmatrix zwischen den Zeilen und \(V\) die Kovarianzmatrix zwischen den Spalten ist.

Das Verhalten allow_singular der multivariate_normal-Verteilung wird derzeit nicht unterstützt. Kovarianzmatrizen müssen vollen Rang haben.

Die matrix_normal-Verteilung ist eng verwandt mit der multivariate_normal-Verteilung. Insbesondere hat \(\mathrm{Vec}(X)\) (der Vektor, der durch Aneinanderreihung der Spalten von \(X\) gebildet wird) eine multivariate Normalverteilung mit Mittelwert \(\mathrm{Vec}(M)\) und Kovarianz \(V \otimes U\) (wobei \(\otimes\) das Kronecker-Produkt ist). Stichprobenziehung und PDF-Auswertung dauern für die Matrix-Normal-Verteilung \(\mathcal{O}(m^3 + n^3 + m^2 n + m n^2)\), aber \(\mathcal{O}(m^3 n^3)\) für die äquivalente multivariate Normalverteilung, was diese äquivalente Form algorithmisch ineffizient macht.

Hinzugefügt in Version 0.17.0.

Beispiele

>>> 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

Alternativ kann das Objekt (als Funktion) aufgerufen werden, um den Mittelwert und die Kovarianzparameter festzulegen, wodurch eine "eingefrorene" Matrix-Normal-Zufallsvariable zurückgegeben wird.

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