Shortcuts

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 ind dimensions of A and 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 of A but with the first ind dimensions pushed back to the end

X.shape == A.shape[ind:] + A.shape[:ind]


Supports input of float, double, cfloat and cdouble dtypes.

Note

When A is a 2-dimensional tensor and ind= 1, this function computes the (multiplicative) inverse of A (see torch.linalg.inv()).

Note

Consider using torch.linalg.tensorsolve() if possible for multiplying a tensor on the left by the tensor inverse, as:

tensorsolve(A, B) == torch.tensordot(tensorinv(A), B)


It is always prefered to use tensorsolve() when possible, as it is faster and more numerically stable than computing the pseudoinverse explicitly.

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 A is not invertible or the product of the first ind dimensions 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.inverse(A)
>>> torch.allclose(Atensorinv, Ainv)
True


Docs

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials