python - multivariate_gauss pdf的实现有什么问题?
问题描述
我使用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
有人可以帮我吗?
解决方案
在 main 的第 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
干杯。
推荐阅读
- polymorphism - 有人可以解释这个 OCaml 程序中使用的类型语法吗?
- c# - 以发布模式发布应用时出现 Http/Https Mixed Content 错误
- cassandra - 在 Cassandra 或 Couchbase 中注入自定义分片
- c++ - 将打印的文本与之前的文本放在同一行
- mysql - MySQL:需要返回票数最多的前 3 名用户。来自两个子查询的总和的一列中需要的结果。Java/Spring MVC
- python-2.7 - EC2 python:无法打开文件'–m':[Errno 2]没有这样的文件或目录
- haskell - Haskell - 将玫瑰树的深度优先遍历表示为展开的实例,以代数方式推导它
- python - 如何正确连接python中的两个函数?
- powershell - 按数字前导数对文件版本进行排序
- c# - 按日期更改一行代码?