Вычисление детерминантов с помощью разложения Холецкого в PyTorch - PullRequest
0 голосов
/ 14 июля 2020

Я пытался вычислить определитель матрицы 2x2 с помощью разложения Холецкого в PyTorch, и он не даст того же числа, что и Numpy, и я не уверен, почему. Насколько я понимаю, вы можете вычислить определитель квадратной положительно определенной матрицы, разложив ее на нижнюю матрицу tri angular и ее транспонирование, то есть M = LL ^ T.

Тогда по закону определителей , определитель M равен определителю L, умноженному на определитель L ^ T. Что, в случае матриц нижнего три angular, является просто произведением диагонали. Таким образом, M будет равно произведению диагонали L, умноженной на произведение диагонали L ^ T.

Однако, когда я реализую это в PyTorch, я получаю неправильное значение. Я скопировал пример кода ниже.

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))

Пример вывода будет примерно таким:

Matrix: 
 [[0.5305128  0.2795679 ]
 [0.41778737 0.40350497]] 

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

Что не так? Почему эти два метода различаются?

Заранее спасибо!

...