Type LinearOperatorScaledIdentity
Namespace tensorflow.linalg
Parent BaseLinearOperatorIdentity
Interfaces ILinearOperatorScaledIdentity
`LinearOperator` acting like a scaled [batch] identity matrix `A = c I`. This operator acts like a scaled [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 `(i1,...,ib)`, `A[i1,...,ib, : :]` is
a scaled version of the `N x N` identity matrix. `LinearOperatorIdentity` is initialized with `num_rows`, and a `multiplier`
(a `Tensor`) of shape `[B1,...,Bb]`. `N` is set to `num_rows`, and the
`multiplier` determines the scale for each batch member.
### Shape compatibility This operator acts on [batch] matrix with compatible shape.
`x` is a batch matrix with compatible shape for `matmul` and `solve` if ```
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]
``` ### Performance * `operator.matmul(x)` is `O(D1*...*Dd*N*R)`
* `operator.solve(x)` is `O(D1*...*Dd*N*R)`
* `operator.determinant()` is `O(D1*...*Dd)` #### 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.
Show Example
# Create a 2 x 2 scaled identity matrix. operator = LinearOperatorIdentity(num_rows=2, multiplier=3.) operator.to_dense() ==> [[3., 0.] [0., 3.]] operator.shape ==> [2, 2] operator.log_abs_determinant() ==> 2 * Log[3] x =... Shape [2, 4] Tensor operator.matmul(x) ==> 3 * 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]. x = operator.solve(y) ==> 3 * x # Create a 2-batch of 2x2 identity matrices operator = LinearOperatorIdentity(num_rows=2, multiplier=5.) operator.to_dense() ==> [[[5., 0.] [0., 5.]], [[5., 0.] [0., 5.]]] x =... Shape [2, 2, 3] operator.matmul(x) ==> 5 * x # Here the operator and x have different batch_shape, and are broadcast. x =... Shape [1, 2, 3] operator.matmul(x) ==> 5 * x
Properties
- batch_shape
- batch_shape_dyn
- domain_dimension
- domain_dimension_dyn
- dtype
- dtype_dyn
- graph_parents
- graph_parents_dyn
- is_non_singular
- is_non_singular_dyn
- is_positive_definite
- is_positive_definite_dyn
- is_self_adjoint
- is_self_adjoint_dyn
- is_square
- is_square_dyn
- multiplier
- multiplier_dyn
- name
- name_dyn
- name_scope
- name_scope_dyn
- PythonObject
- range_dimension
- range_dimension_dyn
- shape
- shape_dyn
- submodules
- submodules_dyn
- tensor_rank
- tensor_rank_dyn
- trainable_variables
- trainable_variables_dyn
- variables
- variables_dyn
Public properties
object batch_shape get;
object batch_shape_dyn get;
Dimension domain_dimension get;
object domain_dimension_dyn get;
object dtype get;
object dtype_dyn get;
IList<object> graph_parents get;
object graph_parents_dyn get;
Nullable<bool> is_non_singular get;
object is_non_singular_dyn get;
object is_positive_definite get;
object is_positive_definite_dyn get;
object is_self_adjoint get;
object is_self_adjoint_dyn get;
Nullable<bool> is_square get;
object is_square_dyn get;
object multiplier get;
The [batch] scalar `Tensor`, `c` in `cI`.
object multiplier_dyn get;
The [batch] scalar `Tensor`, `c` in `cI`.