scipy.stats.matrix_normal¶
- scipy.stats.matrix_normal = <scipy.stats._multivariate.matrix_normal_gen object>[源代码]¶
矩阵正态随机变量。
这个 mean 关键字指定平均值。这个 rowcov 关键字指定行间协方差矩阵。关键字‘colcov’指定列间协方差矩阵。
- 参数
- Xarray_like
分位数,最后两个轴为 X 表示组件。
- meanARRAY_LIKE,可选
分布的平均值(默认值: None )
- rowcovARRAY_LIKE,可选
分布的行间协方差矩阵(默认值: 1 )
- colcovARRAY_LIKE,可选
分布的列间协方差矩阵(默认值: 1 )
- random_state :{无,整型,
numpy.random.Generator
,{无,整型, 如果 seed 为无(或 np.random )、
numpy.random.RandomState
使用的是Singleton。如果 seed 是一个整型、一个新的RandomState
实例,其种子设定为 seed 。如果 seed 已经是一个Generator
或RandomState
实例,则使用该实例。- 或者,可以调用对象(作为函数)来固定平均值
- 和协方差参数,返回“冻结”的矩阵法线
- 随机变量:
- rv = matrix_normal(mean=None, rowcov=1, colcov=1)
使用相同的方法冻结对象,但保持给定的均值和协方差不变。
注意事项
- 如果 mean 设置为 None 然后用零矩阵表示平均值。
该矩阵的维数是从 rowcov 和 colcov ,如果提供了这些,或者设置为 1 如果模棱两可的话。
rowcov 和 colcov 可以是直接指定协方差矩阵的二维数组_LIKE。或者,一维数组将被解释为对角线矩阵的条目,而标量或零维数组将被解释为该值乘以单位矩阵。
指定的协方差矩阵 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\) 列间协方差矩阵。
这个 allow_singular 他们的行为
multivariate_normal
当前不支持分发。协方差矩阵必须是满秩的。这个
matrix_normal
分配与multivariate_normal
分配。具体地说, \(\mathrm{{Vec}}(X)\) (由以下各列连接而成的向量 \(X\) )具有均值的多元正态分布 \(\mathrm{{Vec}}(M)\) 和协方差 \(V \otimes U\) (其中 \(\otimes\) 是Kronecker产品)。抽样和pdf评估是 \(\mathcal{{O}}(m^3 + n^3 + m^2 n + m n^2)\) 对于矩阵法线,但是 \(\mathcal{{O}}(m^3 n^3)\) 对于等价的多元正态分布,使得这种等价形式在算法上是无效的。0.17.0 新版功能.
示例
>>> 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
方法:
``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)``
随机抽取样本。