我有一个张量(shape = [batchsize]) . 我想以特定的顺序重塑张量并变成形状= [ - 1,2] . 我想要具体的顺序:

  • 元素在[0,0]

  • 元素在[1,1]

  • [0,1]处的元素

  • 元素在[1,0]

  • 元素在[2,0]

  • 元素[3,1]

  • 元素在[2,1]

  • 元素在[3,0],依此类推,用于未知的批量大小 .

这是一个示例代码,张量范围=(0到输入= 8) .

import tensorflow as tf
import numpy as np

batchsize = tf.placeholder(shape=[], dtype=tf.int32)
x = tf.range(0, batchsize, 1) 
x = tf.reshape(x, shape=[2, -1])
y = tf.transpose(x)
z = tf.reshape(y, shape=[-1, 2])

input = 8
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    msg = sess.run([z], feed_dict={batchsize: input})
    print(msg)

现在我的输出是:

[array([[0, 4],
       [1, 5],
       [2, 6],
       [3, 7]], dtype=int32)]

但我希望输出为:

[array([[0, 2],
       [3, 1],
       [4, 6],
       [7, 5]], dtype=int32)]

In general :重要的是,仅查看4x1块到2x2块的转换,输入张量的前2个元素在一个对角线上,其余2个元素在对角线上 .

请记住,我不知道批量大小有多大,我只是设置input = 8,原因有很多 . 在我的真实代码中,张量'x'不是范围数组而是复杂的随机数,所以你不能以任何方式排序w.r.t. Value . 我刚刚制作了这个代码用于演示目的 .

这个问题与question有关,但是使用不同的顺序或者这个question,在使用转置进行正常的重塑后,每隔第二行交换一次元素 .