gpt4 book ai didi

python - np.random.multivariate_normal 的混淆行为

转载 作者:太空狗 更新时间:2023-10-29 21:41:31 25 4
gpt4 key购买 nike

我正在使用 numpy 从多元正态采样,如下所示。

mu = [0, 0]
cov = np.array([[1, 0.5], [0.5, 1]]).astype(np.float32)
np.random.multivariate_normal(mu, cov)

它给了我以下警告。

RuntimeWarning: covariance is not positive-semidefinite.

矩阵显然是 PSD。但是,当我使用 np.float64 数组时,它工作正常。我需要协方差矩阵为 np.float32。我究竟做错了什么?

最佳答案

这是 fixed 2019 年 3 月。如果您仍然看到警告,请考虑更新您的 numpy。

即使对于非常小的非对角线元素 > 0,也会发出警告。默认容差值似乎不适用于 32 位 float 。

作为解决方法,将更高的容忍度传递给函数:

np.random.multivariate_normal(mu, cov, tol=1e-6)

详情

np.random.multivariate_normal通过首先用 (u, s, v) = svd(cov) 分解协方差来检查协方差是否为 PSD,然后检查重构是否为 np.dot(v.T * s, v) 与原始 cov 足够接近。

使用 float32 时,重构的结果比 1e-8 允许的默认容差更远,并且该函数会发出警告。

关于python - np.random.multivariate_normal 的混淆行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com