【发布时间】:2012-03-12 23:44:56
【问题描述】:
我承认我在这里很懒,但是有人知道免费的数学 .net 库,它可以在给定平均向量和协方差矩阵的情况下为我提供正态分布的输出?谢谢。
【问题讨论】:
标签: c# .net probability gaussian
我承认我在这里很懒,但是有人知道免费的数学 .net 库,它可以在给定平均向量和协方差矩阵的情况下为我提供正态分布的输出?谢谢。
【问题讨论】:
标签: c# .net probability gaussian
Math.NET 可能适合你。
http://numerics.mathdotnet.com/probability-distributions/
多元分布
Dirichlet Inverse Wishart Matrix Normal Multinomial NormalGamma Wishart
函数参考:
http://api.mathdotnet.com/Numerics/MathNet.Numerics.Distributions/MatrixNormal.htm
编辑:注意你必须从这里下载
http://mathnetnumerics.codeplex.com/releases/view/56448
mathdotnet.com 上的其他链接已过期。
【讨论】:
在双变量情况下,您可以将协方差矩阵表示为单个参数rho。这是一个直接实现它的方法:
[Pure]
public static double GetBivariateGuassian(double muX, double sigmaX, double muY, double sigmaY, double x, double y, double rho = 0)
{
var sigmaXSquared = Math.Pow(sigmaX, 2);
var sigmaYSquared = Math.Pow(sigmaY, 2);
var dX = x - muX;
var dY = y - muY;
var exponent = -0.5;
var normaliser = 2 * Math.PI * sigmaX * sigmaY;
if (rho != 0)
{
normaliser *= Math.Sqrt(1 - Math.Pow(rho, 2));
exponent /= 1 - Math.Pow(rho, 2);
}
var sum = Math.Pow(dX, 2)/sigmaXSquared;
sum += Math.Pow(dY, 2)/sigmaYSquared;
sum -= 2*rho*dX*dY/(sigmaX*sigmaY);
exponent *= sum;
return Math.Exp(exponent) / normaliser;
}
参见维基百科上的Bivariate Normal Distributions 以供参考。
【讨论】: