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.
Arguments
- A
- (Tensor): tensor to invert. 
- ind
- (int): index at which to compute the inverse of - torch_tensordot(). Default:- 3.
Note
Consider using 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))
It is always prefered to use linalg_tensorsolve() when possible, as it is faster and more
numerically stable than computing the pseudoinverse explicitly.
See also
- linalg_tensorsolve()computes- torch_tensordot(linalg_tensorinv(A), B)).
Other linalg:
linalg_cholesky(),
linalg_cholesky_ex(),
linalg_det(),
linalg_eig(),
linalg_eigh(),
linalg_eigvals(),
linalg_eigvalsh(),
linalg_householder_product(),
linalg_inv(),
linalg_inv_ex(),
linalg_lstsq(),
linalg_matrix_norm(),
linalg_matrix_power(),
linalg_matrix_rank(),
linalg_multi_dot(),
linalg_norm(),
linalg_pinv(),
linalg_qr(),
linalg_slogdet(),
linalg_solve(),
linalg_solve_triangular(),
linalg_svd(),
linalg_svdvals(),
linalg_tensorsolve(),
linalg_vector_norm()
Examples
if (torch_is_installed()) {
A <- torch_eye(4 * 6)$reshape(c(4, 6, 8, 3))
Ainv <- linalg_tensorinv(A, ind = 3)
Ainv$shape
B <- torch_randn(4, 6)
torch_allclose(torch_tensordot(Ainv, B), linalg_tensorsolve(A, B))
A <- torch_randn(4, 4)
Atensorinv <- linalg_tensorinv(A, 2)
Ainv <- linalg_inv(A)
torch_allclose(Atensorinv, Ainv)
}
#> [1] TRUE