Я пытался вычислить определитель матрицы 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
Что не так? Почему эти два метода различаются?
Заранее спасибо!