首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PyTorch中通过Cholesky分解计算行列式

在PyTorch中通过Cholesky分解计算行列式
EN

Stack Overflow用户
提问于 2020-07-14 18:40:46
回答 1查看 265关注 0票数 1

我一直试图在PyTorch中通过Cholesky分解来计算2x2矩阵的行列式,但它不会给出与Numpy相同的数字,我也不确定为什么。根据我的理解,你可以通过将正定矩阵分解成一个下三角矩阵和它的转置矩阵来计算正定矩阵的行列式,即M= LL^T。

根据行列式定律,M的行列式等于L的行列式乘以L^T的行列式,在下三角矩阵的情况下,它就是对角线的乘积。所以M等于L的对角线乘以L^T的对角线的乘积。

但是,当我在PyTorch中实现它时,我得到了错误的值。我已经复制了下面的示例代码。

代码语言:javascript
运行
复制
import torch
import numpy as np

matrix = torch.Tensor(2,2).uniform_()
print("Matrix: \n", matrix.detach().numpy(), "\n")

print("Positive-definite?: ", np.all(np.linalg.eigvals(matrix.detach().numpy()) > 0))
det_np = np.linalg.det(matrix.detach().numpy())

det_tor = torch.cholesky(matrix, upper=False).diag().prod()**2

print("determinant (numpy) %8.4f" % (det_np))
print("determinant (torch) %8.4f" % (det_tor))

输出示例如下所示:

代码语言:javascript
运行
复制
Matrix: 
 [[0.5305128  0.2795679 ]
 [0.41778737 0.40350497]] 

Positive-definite?:  True
determinant (numpy)   0.0973
determinant (torch)   0.0395

到底出了什么问题?为什么这两种方法会有区别?

EN

回答 1

Stack Overflow用户

发布于 2021-03-20 20:25:51

从1.8版开始,PyTorch原生支持numpy风格的torch.linalg操作,包括Cholesky分解和行列式:

代码语言:javascript
运行
复制
torch.linalg.det(input)

计算方阵输入的行列式,或批处理输入中每个方阵的行列式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62893307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档