У меня есть тензор (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)]
В общем : важно то, что, глядя только на преобразование блока 4x1 в блок 2x2, первые 2 элемента входного тензора располагаются на одной диагонали, а остальные 2 элемента - на счетчик диагональ.
Имейте в виду, я не знаю, насколько велик размер пакета, я просто установил input = 8 по примерной причине. В моем реальном коде тензор ´x´ - это не массив диапазонов, а сложные случайные числа, поэтому вы не можете ни в коем случае сортировать w.r.t. ценности. Я только что сделал этот код для демонстрации.
Этот вопрос относится к этому вопросу , но с другим порядком или к этому вопросу , после выполнения обычного изменения формы с помощью транспонирования, чтобы просто поменять элементы в каждой 2-й строке.