|TensorFlow 1 version||View source on GitHub|
LinearOperator acting like a [batch] square diagonal matrix.
Compat aliases for migration
See Migration guide for more details.
tf.linalg.LinearOperatorDiag( diag, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=None, name='LinearOperatorDiag' )
Used in the notebooks
|Used in the tutorials|
This operator acts like a [batch] diagonal matrix
A with shape
[B1,...,Bb, N, N] for some
b >= 0. The first
b indices index a
batch member. For every batch index
A[i1,...,ib, : :] is
N x N matrix. This matrix
A is not materialized, but for
purposes of broadcasting this shape will be relevant.
LinearOperatorDiag is initialized with a (batch) vector.
# Create a 2 x 2 diagonal linear operator. diag = [1., -1.] operator = LinearOperatorDiag(diag) operator.to_dense() ==> [[1., 0.] [0., -1.]] operator.shape ==> [2, 2] operator.log_abs_determinant() ==> scalar Tensor x = ... Shape [2, 4] Tensor operator.matmul(x) ==> Shape [2, 4] Tensor # Create a [2, 3] batch of 4 x 4 linear operators. diag = tf.random.normal(shape=[2, 3, 4]) operator = LinearOperatorDiag(diag) # Create a shape [2, 1, 4, 2] vector. Note that this shape is compatible # since the batch dimensions, [2, 1], are broadcast to # operator.batch_shape = [2, 3]. y = tf.random.normal(shape=[2, 1, 4, 2]) x = operator.solve(y) ==> operator.matmul(x) = y
This operator acts on [batch] matrix with compatible shape.
x is a batch matrix with compatible shape for
operator.shape = [B1,...,Bb] + [N, N], with b >= 0 x.shape = [C1,...,Cc] + [N, R], and [C1,...,Cc] broadcasts with [B1,...,Bb] to [D1,...,Dd]
operator is a
LinearOperatorDiag of shape
x.shape = [N, R]. Then
N * Rmultiplications.
N * Rmultiplications.
operator.determinant()involves a size
x have shape
[B1,...,Bb, N, N] and
[B1,...,Bb, N, R], every operation increases in complexity by
Matrix property hints
LinearOperator is initialized with boolean flags of the form
X = non_singular, self_adjoint, positive_definite, square.
These have the following meaning:
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.
is_X == False, callers should expect the operator to not have
is_X == None(the default), callers should have no expectation either way.
||Expect that this operator is non-singular.|