我遇到了一个问题,需要在Java中生成一个多元正态分布的随机数集合,该分布的均值为0,方差协方差矩阵为给定的3*3矩阵。
有没有简单的方法可以实现这个需求呢?
我遇到了一个问题,需要在Java中生成一个多元正态分布的随机数集合,该分布的均值为0,方差协方差矩阵为给定的3*3矩阵。
有没有简单的方法可以实现这个需求呢?
1) 使用库实现,正如Dima所建议的。
或者,如果你真的有冲动要自己完成:
2) 假设您想使用平均向量M和方差/协方差矩阵V生成法线,请对V执行Cholesky分解来得到下三角矩阵L,使得V=LLt(其中上标t表示转置)。生成一个由三个独立标准正态分布组成的向量Z(使用Random.nextGaussian()
获取各个元素)。然后LZ + M
将具有所需的多维正态分布。
Apache Commons拥有您所需的内容:
MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(means, covariances);
double vals[] = mnd.sample();