|TensorFlow 1 version||View source on GitHub|
Kronecker product between two
Compat aliases for migration
See Migration guide for more details.
tf.linalg.LinearOperatorKronecker( operators, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=None, name=None )
This operator composes one or more linear operators
building a new
LinearOperator representing the Kronecker product:
op1 x op2 x .. opJ (we omit parentheses as the Kronecker product is
opj has shape
batch_shape_j + [M_j, N_j], then the composed operator
will have shape equal to
broadcast_batch_shape + [prod M_j, prod N_j],
where the product is over all operators.
# Create a 4 x 4 linear operator composed of two 2 x 2 operators. operator_1 = LinearOperatorFullMatrix([[1., 2.], [3., 4.]]) operator_2 = LinearOperatorFullMatrix([[1., 0.], [2., 1.]]) operator = LinearOperatorKronecker([operator_1, operator_2]) operator.to_dense() ==> [[1., 0., 2., 0.], [2., 1., 4., 2.], [3., 0., 4., 0.], [6., 3., 8., 4.]] operator.shape ==> [4, 4] operator.log_abs_determinant() ==> scalar Tensor x = ... Shape [4, 2] Tensor operator.matmul(x) ==> Shape [4, 2] Tensor # Create a [2, 3] batch of 4 x 5 linear operators. matrix_45 = tf.random.normal(shape=[2, 3, 4, 5]) operator_45 = LinearOperatorFullMatrix(matrix) # Create a [2, 3] batch of 5 x 6 linear operators. matrix_56 = tf.random.normal(shape=[2, 3, 5, 6]) operator_56 = LinearOperatorFullMatrix(matrix_56) # Compose to create a [2, 3] batch of 20 x 30 operators. operator_large = LinearOperatorKronecker([operator_45, operator_56]) # Create a shape [2, 3, 20, 2] vector. x = tf.random.normal(shape=[2, 3, 6, 2]) operator_large.matmul(x) ==> Shape [2, 3, 30, 2] Tensor
The performance of
LinearOperatorKronecker on any operation is equal to
the sum of the individual operators' operations.
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.|
||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
If all operators do not have the same
Returns the adjoint of the current |