Multivariate normal density in Python?

后端 未结 10 1132
星月不相逢
星月不相逢 2021-01-30 19:42

Is there any python package that allows the efficient computation of the PDF (probability density function) of a multivariate normal distribution?

It doesn\'t seem to be

10条回答
  •  被撕碎了的回忆
    2021-01-30 20:35

    I just made one for my purposes so I though I'd share. It's built using "the powers" of numpy, on the formula of the non degenerate case from http://en.wikipedia.org/wiki/Multivariate_normal_distribution and it aso validates the input.

    Here is the code along with a sample run

    from numpy import *
    import math
    # covariance matrix
    sigma = matrix([[2.3, 0, 0, 0],
               [0, 1.5, 0, 0],
               [0, 0, 1.7, 0],
               [0, 0,   0, 2]
              ])
    # mean vector
    mu = array([2,3,8,10])
    
    # input
    x = array([2.1,3.5,8, 9.5])
    
    def norm_pdf_multivariate(x, mu, sigma):
        size = len(x)
        if size == len(mu) and (size, size) == sigma.shape:
            det = linalg.det(sigma)
            if det == 0:
                raise NameError("The covariance matrix can't be singular")
    
            norm_const = 1.0/ ( math.pow((2*pi),float(size)/2) * math.pow(det,1.0/2) )
            x_mu = matrix(x - mu)
            inv = sigma.I        
            result = math.pow(math.e, -0.5 * (x_mu * inv * x_mu.T))
            return norm_const * result
        else:
            raise NameError("The dimensions of the input don't match")
    
    print norm_pdf_multivariate(x, mu, sigma)
    

提交回复
热议问题