如何在pytorch中生成正定矩阵?

时间:2019-09-30 23:47:26

标签: pytorch

我正在尝试使用随机生成的协方差矩阵定义多元高斯分布:

psi = torch.zeros(512).normal_(0., 1.).requires_grad_(True)

# Generate random matrix
Sigma_k = torch.rand(512, 512)
# Make it symmetric positive
Sigma_k = Sigma_k * Sigma_k.t()
# Make it definite
Sigma_k.add_(0.001, torch.eye(512)).requires_grad_(True)

multivariate_normal.MultivariateNormal(psi, Sigma_k)

但是我最终得到一个例外:

  

RuntimeError:Lapack错误在potrf中:在/Users/soumith/mc3build/conda-bld/pytorch_1549597882250/work/aten/src/TH/generic/THTensorLapack.cpp:658 < / p>

生成正定方阵的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

在“确定范围内”

tensor.add()不会更改tensor,而只会返回已更改的版本。 您要使用tensor.add_()

答案 1 :(得分:1)

答案是应该得到矩阵A和其转置矩阵(A.t())的点积,以获得正半定矩阵。最后一件事是确保它是确定的(严格大于零)。

使用Pytorch:

Sigma_k = torch.rand(512, 512)
Sigma_k = torch.mm(Sigma_k, Sigma_k.t())
Sigma_k.add_(torch.eye(512))

Cordova Android 8.1.0中描述了正式算法。