|TensorFlow 1 version||View source on GitHub|
LinearOperator acting like a [batch] square identity matrix.
Compat aliases for migration
See Migration guide for more details.
tf.linalg.LinearOperatorIdentity( num_rows, batch_shape=None, dtype=None, is_non_singular=True, is_self_adjoint=True, is_positive_definite=True, is_square=True, assert_proper_shapes=False, name='LinearOperatorIdentity' )
This operator acts like a [batch] identity 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.
LinearOperatorIdentity is initialized with
num_rows, and optionally
dtype arguments. If
operator efficiently passes through all arguments. If
provided, broadcasting may occur, which will require making copies.
# Create a 2 x 2 identity matrix. operator = LinearOperatorIdentity(num_rows=2, dtype=tf.float32) operator.to_dense() ==> [[1., 0.] [0., 1.]] operator.shape ==> [2, 2] operator.log_abs_determinant() ==> 0. x = ... Shape [2, 4] Tensor operator.matmul(x) ==> Shape [2, 4] Tensor, same as x. y = tf.random.normal(shape=[3, 2, 4]) # Note that y.shape is compatible with operator.shape because operator.shape # is broadcast to [3, 2, 2]. # This broadcast does NOT require copying data, since we can infer that y # will be passed through without changing shape. We are always able to infer # this if the operator has no batch_shape. x = operator.solve(y) ==> Shape [3, 2, 4] Tensor, same as y. # Create a 2-batch of 2x2 identity matrices operator = LinearOperatorIdentity(num_rows=2, batch_shape=) operator.to_dense() ==> [[[1., 0.] [0., 1.]], [[1., 0.] [0., 1.]]] # Here, even though the operator has a batch shape, the input is the same as # the output, so x can be passed through without a copy. The operator is able # to detect that no broadcast is necessary because both x and the operator # have statically defined shape. x = ... Shape [2, 2, 3] operator.matmul(x) ==> Shape [2, 2, 3] Tensor, same as x # Here the operator and x have different batch_shape, and are broadcast. # This requires a copy, since the output is different size than the input. x = ... Shape [1, 2, 3] operator.matmul(x) ==> Shape [2, 2, 3] Tensor, equal to [x, x]
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]
batch_shape initialization arg is
batch_shape initialization arg is provided, and static checks cannot
rule out the need to broadcast:
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.
Scalar non-negative integer
||Data type of the matrix that this operator represents.|
||Expect that this operator is non-singular.|
||Expect that this operator is equal to its hermitian transpose.|
Expect that this operator is positive definite,
meaning the quadratic form
||Expect that this operator acts like square [batch] matrices.|
A name for this