python - 我在执行 multivariate_gauss pdf 时遇到什么问题?

标签 python numpy math gaussian

我使用python计算multivariate_gauss分布,但我不知道出了什么问题。 代码在这里

# calculate multi-d gaussian pdf
def mul_gauss(x, mu, sigma) -> float:
    d = len(x[0])
    front = 1 / math.sqrt(((2 * math.pi) ** d) * np.linalg.det(sigma))
    tmp = (np.array(x) - np.array(mu))
    tmp_T = np.transpose(tmp)
    back = -0.5 * (np.matmul(np.matmul(tmp, np.linalg.inv(sigma)), tmp_T))[0][0]
    return front * math.exp(back)

我将结果与 scipy.stats.multivariate_normal(x,mu,sigma) 进行了比较

x = [[2,2]]
mu = [[4,4]]
sigma = [[3,0],[0,3]]
ret_1 = mul_gauss(x, mu, sigma)
ret_2 = scipy.stats.multivariate_normal(x[0], mu[0], sigma).pdf(x[0])
print('ret_1=',ret1)
print('ret_2=',ret2)

输出是 ret_1=0.013984262505331654 ret_2=0.03978873577297383

有人可以帮助我吗?

最佳答案

在主函数的第 5 行中,您将对象上的 .pdf() 作为方法调用。 这是一个修复:

# calculate multi-d gaussian pdf
import math

import numpy as np
from scipy import stats


def mul_gauss(x, mu, sigma) -> float:
    d = x[0].shape[0]
    coeff = 1/np.sqrt((2 * math.pi) ** d * np.linalg.det(sigma))
    tmp = x - mu
    exponent = -0.5 * (np.matmul(np.matmul(tmp, np.linalg.inv(sigma)), tmp.T))[0][0]
    return coeff * math.exp(exponent)


x = np.array([[2,2]])
mu = np.array([[4,4]])
sigma = np.array([[3,0],[0,3]])
ret_1 = mul_gauss(x, mu, sigma)
ret_2 = stats.multivariate_normal.pdf(x[0], mu[0], sigma)
print('ret_1=',ret_1)
print('ret_2=',ret_2)

输出:

ret_1= 0.013984262505331654
ret_2= 0.013984262505331658

干杯。

关于python - 我在执行 multivariate_gauss pdf 时遇到什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66656620/

相关文章:

Python - 引用不同目录中的文件

python - 在 pandas 系列上使用 apply 方法获取 TypeError 'Series' 对象是可变的,因此无法对其进行哈希处理

python - 网络爬虫的速度不能超过约1MB/秒

python - 无法使用 numpy 将值分配给 'double slice'

python - 从通用图集版本更改为经过调整的图集版本

math - Big O(logn) 是以 e 为底的对数吗?

java - Clojure 在简单循环与 Java 上的性能真的很差

javascript - 简单的 JavaScript 数学问题

python - 数据库错误 : ORA-01036: illegal variable name/number

python - 如何根据另一个数组的引用值对数组的值求和