有没有在PyTorch中计算复矩阵行列式的方法?
torch.det
不支持'ComplexFloat'类型。torch.det
不支持'ComplexFloat'类型。很遗憾,目前还没有实现。一种方法是实现自己的版本或者直接使用np.linalg.det
。这里是一个使用LU分解计算复杂矩阵行列式的简短函数:
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)
torch.linalg
操作。特别地,torch.linalg.det
支持cfloat
和cdouble
复数数据类型:torch.linalg.det(input)