Home > Net >  How to write a circulant matrix in tensorflow
How to write a circulant matrix in tensorflow

Time:11-20

I want to generate a circulant matrix in tensorflow without using any for loops. For example my input is [1, 2, 3], and the expected output is [[1,2,3],[2,3,1],[3,1,2]]. I think we can use nd convolution to do it, but tensorflow doesn't have nd convolution.

CodePudding user response:

I think the simplest solution to this problem, without using an explicit loop, is to use tf.extract_volume_patches, which can be used to creating a sliding window over a tensor. You will just have to reshape the tensor accordingly:

import tensorflow as tf

tensor = tf.constant([1, 2, 3])
stride = 4
window_size = 3

tensor = tf.tile(tensor, [stride])
tensor = tf.reshape(tensor, [1, -1, 1, 1, 1])
windowed_tensor = tf.extract_volume_patches(tensor,
                                  ksizes=[1, window_size, 1, 1, 1],
                                  strides=[1, stride, 1, 1, 1],
                                  padding='VALID')[0, :, 0, 0]
tf.print(windowed_tensor)
[[1 2 3]
 [2 3 1]
 [3 1 2]]
  • Related