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)
>>> a_tensorinv = torch.linalg.tensorinv(a, ind=1)
>>> a_inv = torch.inverse(a)
>>> torch.allclose(a_tensorinv, a_inv)
True