LostTech.TensorFlow : API Documentation

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


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`.

object name get;

object name_dyn get;

object name_scope get;

object name_scope_dyn get;

object PythonObject get;

Dimension range_dimension get;

object range_dimension_dyn get;

TensorShape shape get;

object shape_dyn get;

ValueTuple<object> submodules get;

object submodules_dyn get;

Nullable<int> tensor_rank get;

object tensor_rank_dyn get;

object trainable_variables get;

object trainable_variables_dyn get;

object variables get;

object variables_dyn get;