如何在tensorflow中写一个循环矩阵

How to write a circulant matrix in tensorflow

我想在不使用任何 for 循环的情况下在 tensorflow 中生成一个循环矩阵。例如我的输入是 [1, 2, 3],预期的输出是 [[1,2,3],[2,3,1],[3,1,2]]。我觉得我们可以用nd卷积来做,但是tensorflow没有nd卷积。

我认为解决此问题的最简单方法是使用 tf.extract_volume_patches,而不使用显式循环,它可用于在张量上创建滑动 window。您只需要相应地重塑张量:

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]]