【发布时间】:2021-06-13 19:39:30
【问题描述】:
我用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
谁能帮帮我?
【问题讨论】:
-
看来一切都是正确的。事实上,使用 scipy stats 多元正态 pdf 方法我意识到了一些我不明白的事情。如果您尝试例如 x = [[2,2]] and mu = [[2,2]] and x = [[4,4]] and mu = [[4,4]] 它返回不同的值!否则,据我所知,您的代码将返回正确的代码。所以pdf方法是我认为正在做一些奇怪的事情
-
@GonzaloPolo 实际上,当我使用 x = [[a,b,c]] 和 mu=[[d,e,f]] 等 3-d 情况时,我的代码返回值大于 1 。但这是不可能的。所以我认为我的代码确实有一些问题,但我找不到它。
-
甚至插入一个正定协方差矩阵作为输入?我无法重现它
标签: python numpy math gaussian