- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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/
import numpy as np np.random.seed(12) num_observations = 5 x1 = np.random.multivariate_normal([1, 1]
我尝试使用 numpy.random.multivariate_normal 对一些 30000 多个变量进行随机采样,但它总是占用我所有的内存(32G)然后终止。实际上,相关性是球形的,每个变量仅与
我正在尝试使用 numpy.random.multivariate_normal 生成多个样本,其中每个样本都来自具有不同 mean 和 cov 的多元正态分布。比如我想画2个样本,我试过 from
我正在使用 numpy 从多元正态采样,如下所示。 mu = [0, 0] cov = np.array([[1, 0.5], [0.5, 1]]).astype(np.float32) np.ran
我正在尝试使用 scipy 生成多元分布的 pdf 值。这是我脚本中的 import 语句: from scipy.stats import multivariate_normal 但它抛出一个Imp
numpy.random.multivariate_normal(平均值, cov[, 大小]) 我有一个包含 N 个点和 X 个维度的数据集。因此,当我计算 numpy.mean(data, axi
我需要在脚本中使用多元正态分布。我注意到我的版本给出了与 scipy 的方法不同的答案。我真的不明白为什么...... 这是我的功能: def gauss(x, mu, sigma): ass
使用numpy函数numpy.random.multivariate_normal(),如果我给出均值和协方差,我就可以从多元高斯中抽取随机样本。 举个例子, import numpy as np m
我在尝试使用 scipy.stats.multivariate_normal 时遇到问题,希望你们中的某个人能够提供帮助。 我有一个 2x2 矩阵,可以找到使用 numpy.linalg.inv()
我想为我在 python 上的数据集计算多元高斯密度函数。我的数据集有 21 个变量和 75 个数据点。 我已经计算了这个 21*21 数组的协方差矩阵 (cov),以及形状为 (21,) 的均值数组
我是一名优秀的程序员,十分优秀!