torch.linalg.tensorinv#
- torch.linalg.tensorinv(A,ind=2,*,out=None)→Tensor#
Computes the multiplicative inverse of
torch.tensordot().Ifm is the product of the first
inddimensions ofAandn is the product ofthe rest of the dimensions, this function expectsm andn to be equal.If this is the case, it computes a tensorX such thattensordot(A, X,ind) is the identity matrix in dimensionm.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 a2-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 leftby 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 morenumerically stable than computing the pseudoinverse explicitly.See also
torch.linalg.tensorsolve()computestorch.tensordot(tensorinv(A),B).- Parameters
A (Tensor) – tensor to invert. Its shape must satisfyprod(
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 ifNone. 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.shapetorch.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