Autograd doesn’t work for torch.linalg.lstsq
when dealing with complex tensors. Example:
A = torch.complex(torch.tensor([[1.,0.],[0.,1.]]), torch.tensor([[1.,0.],[0.,1.]]))
b = torch.complex(torch.tensor([2.,3.]), torch.tensor([1.,0.]))
A.requires_grad = True
b.requires_grad = True
x = torch.linalg.lstsq(A,b).solution
print(x) # gives tensor([1.5000-0.5000j, 1.5000-1.5000j], grad_fn=<LinalgLstsqBackward0>)
x[0].backward()
Results in IndexError: Dimension out of range (expected to be in range of [-1, 0], but got -2)
.
Note: I can achieve the same result for x
via torch.linalg.pinv(A) @ b
, and autograd does work for pinv
. However, I am curious why the lstsq
autograd doesn’t work, and also because according to the documentation: