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 eineRandomState- oderGenerator-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
1gesetzt, 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_normalist\[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 dermultivariate_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.