【问题标题】:multivariate normal distribution given mean vector and covariance matrix给定均值向量和协方差矩阵的多元正态分布
【发布时间】:2012-03-12 23:44:56
【问题描述】:

我承认我在这里很懒,但是有人知道免费的数学 .net 库,它可以在给定平均向量和协方差矩阵的情况下为我提供正态分布的输出?谢谢。

【问题讨论】:

    标签: c# .net probability gaussian


    【解决方案1】:

    Math.NET 可能适合你。

    http://www.mathdotnet.com/

    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 上的其他链接已过期。

    【讨论】:

    • 谢谢。我之前来过这里。查看源代码我找不到多项式 - 你知道它在哪里吗?谢谢。
    • 如果我理解正确,它会在给定平均向量和协方差矩阵的情况下产生一个随机数。我不想要一个随机数。我想要多元正态分布的确切输出。谢谢。
    • MatrixNormal 分布采用平均矩阵加上行和列的协方差,并生成一个随机 matrix,其元素具有适当的分布......这不就是你的意思吗之后?
    • 我想要一个数字 y。即给定平均向量和协方差矩阵的多元正态分布的输出。
    【解决方案2】:

    在双变量情况下,您可以将协方差矩阵表示为单个参数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 以供参考。

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 2011-05-21
      • 2021-03-22
      • 2022-01-21
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多