如何在 Math.NET 中对多元正态分布进行采样?
How to sample a multivariate normal distribution in Math.NET?
我是不是遗漏了什么明显的东西? Math.NET 有 a wealth 个概率分布抽样 类 但没有多元正态分布。它有 Normal
和 MatrixNormal
类 — 是否有一种简单的方法可以采用其中任何一个来对由均值向量和协方差矩阵定义的多元正态分布进行采样?
根据@robert-dodier 的建议,MatrixNormal
分布成为 p = 1
处的多元正态分布。这比如果有原生 Multinormal
发行版 class 更冗长,但也不多:
using MathNet.Numerics.LinearAlgebra;
Vector Sample<T>(System.Random random, Vector<T> mean, Matrix<T> cov)
{
return MatrixNormal.Sample(
random, mean.ToColumnMatrix(), cov, Matrix<T>.Build.DenseIdentity(1)).Column(0);
}
但是,只允许使用正定协方差矩阵,因为该分布执行 Cholesky 分解。
我是不是遗漏了什么明显的东西? Math.NET 有 a wealth 个概率分布抽样 类 但没有多元正态分布。它有 Normal
和 MatrixNormal
类 — 是否有一种简单的方法可以采用其中任何一个来对由均值向量和协方差矩阵定义的多元正态分布进行采样?
根据@robert-dodier 的建议,MatrixNormal
分布成为 p = 1
处的多元正态分布。这比如果有原生 Multinormal
发行版 class 更冗长,但也不多:
using MathNet.Numerics.LinearAlgebra;
Vector Sample<T>(System.Random random, Vector<T> mean, Matrix<T> cov)
{
return MatrixNormal.Sample(
random, mean.ToColumnMatrix(), cov, Matrix<T>.Build.DenseIdentity(1)).Column(0);
}
但是,只允许使用正定协方差矩阵,因为该分布执行 Cholesky 分解。