|TensorFlow 1 version||View source on GitHub|
LinearOperator acting like a block circulant matrix.
Compat aliases for migration
See Migration guide for more details.
tf.linalg.LinearOperatorCirculant2D( spectrum, input_output_dtype=tf.dtypes.complex64, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=True, name='LinearOperatorCirculant2D' )
This operator acts like a block circulant matrix
[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.
Description in terms of block circulant matrices
A is block circulant, with block sizes
N0, N1 (
N0 * N1 = N):
A has a block circulant structure, composed of
N0 x N0 blocks, with each
N1 x N1 circulant matrix.
For example, with
Z each circulant,
A = |W Z Y X| |X W Z Y| |Y X W Z| |Z Y X W|
A itself will not in general be circulant.
Description in terms of the frequency spectrum
There is an equivalent description in terms of the [batch] spectrum
Fourier transforms. Here we consider
A.shape = [N, N] and ignore batch
H.shape = [N0, N1], (
N0 * N1 = N):
Loosely speaking, matrix multiplication is equal to the action of a
A u = IDFT2[ H DFT2[u] ].
Precisely speaking, given
[N, R] matrix
DFT2[u] be the
[N0, N1, R]
Tensor defined by re-shaping
[N0, N1, R] and taking
a two dimensional DFT across the first two dimensions. Let