ML Community Day is November 9! Join us for updates from TensorFlow, JAX, and more Learn more


LinearOperator acting like a [batch] of permutation matrices.

Inherits From: LinearOperator, Module

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 (i1,...,ib), A[i1,...,ib, : :] is an 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 i says to move the v[i]-th row of the input matrix to the i-th row. 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 semantics as tf.transpose.

# Create a 3 x 3 permutation matrix that swaps the last two columns.
vec = [0, 2, 1]
operator = LinearOperatorPermutation(vec)

==> [[1., 0., 0.]
     [0., 0., 1.]
     [0., 1., 0.]]

==> [3, 3]

# This will be zero.
==> scalar Tensor

x = ... Shape [3, 4] Tensor
==> Shape [3, 4] Tensor

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]

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.

perm Shape [B1,...,Bb, N] Integer Tensor with b >= 0 N >= 0. An integer vector that represents the permutation to apply. Note that this argument is same as tf.transpose. However, this permutation is applied on the rows, while the permutation in tf.transpose is applied on the dimensions of the Tensor. perm is required to have unique entries from {0, 1, ... N-1}.
dtype The dtype of arguments to this operator. Default: float32. Allowed dtypes: float16, float32<