ML Community Day is November 9! Join us for updates from TensorFlow, JAX, and more Learn more


LinearOperator representing the inverse of another operator.

Inherits From: LinearOperator, Module

This operator represents the inverse of another operator.

# Create a 2 x 2 linear operator.
operator = LinearOperatorFullMatrix([[1., 0.], [0., 2.]])
operator_inv = LinearOperatorInversion(operator)

==> [[1., 0.]
     [0., 0.5]]

==> [2, 2]

==> - log(2)

x = ... Shape [2, 4] Tensor
==> Shape [2, 4] Tensor, equal to operator.solve(x)


The performance of LinearOperatorInversion depends on the underlying operators performance: solve and matmul are swapped, and determinant is inverted.

Matrix property hints

This LinearOperator is initialized with boolean flags of the form is_X, for X = non_singular, self_adjoint, positive_definite, square. These have the following meaning:

  • If is_X == True, callers should expect the operator to have the property X. This is a promise that should be fulfilled, but is not a runtime assert. For example, finite floating point precision may result in these promises being violated.
  • If is_X == False, callers should expect the operator to not have X.
  • If is_X == None (the default), callers should have no expectation either way.

operator LinearOperator object. If operator.is_non_singular == False, an exception is raised. We do allow operator.is_non_singular == None, in which case this operator will have is_non_singular == None. Similarly for is_self_adjoint and is_positive_definite.
is_non_singular Expect that this operator is non-singular.
is_self_adjoint Expect that this operator is equal to its hermitian transpose.
is_positive_definite Expect that this operator is positive definite, meaning the quadratic form x^H A x has positive real part for all nonzero x. Note that we do not require the operator to be self-adjoint to be positive-definite. See:
is_square Expect that this operator acts like square [batch] matrices.
name A name for this LinearOperator. Default is + "_inv".

ValueError If operator.is_non_singular is False.

H Returns the adjoint of the current LinearOperator.

Given A representing this LinearOperator, return A*. Note that calling self.adjoint() and self.H are equivalent.

batch_shape TensorShape of batch dimensions of this LinearOperator.

If this operator acts like the batch matrix A with A.shape = [B1,...,Bb, M, N], then this returns TensorShape([B1,...,Bb]), equivalent to A.shape[:-2]

domain_dimension Dimension (in the sense of vector spaces) of the domain of this operator.

If this operator ac