torch.linalg.tensorinv#
- torch.linalg.tensorinv(A, ind=2, *, out=None) Tensor#
Computes the multiplicative inverse of
torch.tensordot().If m is the product of the first
inddimensions ofAand n is the product of the rest of the dimensions, this function expects m and n to be equal. If this is the case, it computes a tensor X such that tensordot(A, X,ind) is the identity matrix in dimension m. X will have the shape ofAbut with the firstinddimensions pushed back to the endX.shape == A.shape[ind:] + A.shape[:ind]
Supports input of float, double, cfloat and cdouble dtypes.
Note
When
Ais a 2-dimensional tensor andind= 1, this function computes the (multiplicative) inverse ofA(seetorch.linalg.inv()).Note
Consider using
torch.linalg.tensorsolve()if possible for multiplying a tensor on the left by the tensor inverse, as:linalg.tensorsolve(A, B) == torch.tensordot(linalg.tensorinv(A), B) # When B is a tensor with shape A.shape[:B.ndim]
It is always preferred to use
tensorsolve()when possible, as it is faster and more numerically stable than computing the pseudoinverse explicitly.See also
torch.linalg.tensorsolve()computes torch.tensordot(tensorinv(A),B).- Parameters
A (Tensor) – tensor to invert. Its shape must satisfy prod(
A.shape[:ind]) == prod(A.shape[ind:]).ind (int) – index at which to compute the inverse of
torch.tensordot(). Default: 2.
- Keyword Arguments
out (Tensor, optional) – output tensor. Ignored if None. Default: None.
- Raises
RuntimeError – if the reshaped
Ais not invertible or the product of the firstinddimensions is not equal to the product of the rest.
Examples:
>>> A = torch.eye(4 * 6).reshape((4, 6, 8, 3)) >>> Ainv = torch.linalg.tensorinv(A, ind=2) >>> Ainv.shape torch.Size([8, 3, 4, 6]) >>> B = torch.randn(4, 6) >>> torch.allclose(torch.tensordot(Ainv, B), torch.linalg.tensorsolve(A, B)) True >>> A = torch.randn(4, 4) >>> Atensorinv = torch.linalg.tensorinv(A, ind=1) >>> Ainv = torch.linalg.inv(A) >>> torch.allclose(Atensorinv, Ainv) True