PyTorch 中复杂矩阵的行列式

Determinant of a complex matrix in PyTorch

有没有办法在 PyTorch 中计算复数矩阵的行列式?

torch.det 未针对 'ComplexFloat'

实施

很遗憾,目前尚未实现。一种方法是实现您自己的版本或简单地使用 np.linalg.det。 这是一个简短的函数,它计算我使用 LU-decomposition:

编写的复数矩阵的行列式
def complex_det(A):
    def complex_diag(A):
        return torch.view_as_complex(torch.stack((A.real.diag(), A.imag.diag()),dim=1))
    #Perform LU decomposition to matrix A:
    A_LU, pivots = A.lu()
    P, A_L, A_U = torch.lu_unpack(A_LU, pivots)
    #Det. of multiplied matrices is multiplcation of det.:
    det = torch.prod(complex_diag(A_L)) * torch.prod(complex_diag(A_U)) * torch.det(P.real) #Could probably calculate det(P) [which is +-1] efficiently using Sylvester's determinant identity
    return det
#Test it:
A = torch.view_as_complex(torch.randn(3,3,2))
complex_det(A)

从 1.8 版开始,PyTorch 原生支持 numpy 风格的 torch.linalg 操作。特别是,torch.linalg.det 支持 cfloatcdouble 复数数据类型:

torch.linalg.det(input)

Computes the determinant of a square matrix input, or of each square matrix in a batched input.

This function supports float, double, cfloat and cdouble dtypes.