|View source on GitHub|
LinearOperator acting like a [batch] of permutation matrices.
Compat aliases for migration
See Migration guide for more details.
tf.linalg.LinearOperatorPermutation( perm, dtype=tf.dtypes.float32, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=None, name='LinearOperatorPermutation' )
This operator acts like a [batch] of permutations 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.
LinearOperatorPermutation is initialized with a (batch) vector.
A permutation, is defined by an integer vector
v whose values are unique
and are in the range
[0, ... n]. Applying the permutation on an input
matrix has the folllowing meaning: the value of
v at index
says to move the
v[i]-th row of the input matrix to the
Because all values are unique, this will result in a permutation of the
rows the input matrix. Note, that the permutation vector
v has the same
# Create a 3 x 3 permutation matrix that swaps the last two columns. vec = [0, 2, 1] operator = LinearOperatorPermutation(vec) operator.to_dense() ==> [[1., 0., 0.] [0., 0., 1.] [0., 1., 0.]] operator.shape ==> [3, 3] # This will be zero. operator.log_abs_determinant() ==> scalar Tensor x = ... Shape [3, 4] Tensor operator.matmul(x) ==> Shape [3, 4] Tensor
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]
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.