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 ofA
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 ofA
but with the firstind
dimensions pushed back to the endX.shape == A.shape[ind:] + A.shape[:ind]
Supports input of float, double, cfloat and cdouble dtypes.
Note
When
A
is 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: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.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
A
is not invertible or the product of the firstind
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