#tensorflow #matrix #slice
#tensorflow #матрица #срез
Вопрос:
У меня есть нулевая матрица (мы можем просмотреть ее как картинку):
matrix = tf.zeros(name="matrix", shape=(4, 5), dtype=tf.int32)
и тензор тетрадей, которые указывают на некоторые «прямоугольники» (по верхней левой и нижней правой вершинам, возможно, перекрывающиеся) на этом matrix
:
(first_row, first_column, second_row, second_column)
здесь [first_row:second_row, first_column,second_column]
формирует одно поле на matrix
.
И вопрос в том, как я могу назначить / изменить все «значение в штучной упаковке» на изображении с 0
на 1
, используя нарезку [first_row:second_row, first_column,second_column]
или другие функции тензорного потока?
Обновить:
Ввод:
matrix = tf.zeros(name="matrix", shape=(4, 5), dtype=tf.int32)
first_row = tf.constant([0,2])
first_column = tf.constant([2,1])
second_row = tf.constant([3,3])
second_column = tf.constant([3,3])
Ожидаемый результат (по примеру блоков (0,2,3,3)
и (2,1,3,3)
):
array([[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0]])
Комментарии:
1. Можете ли вы привести примеры ввода и вывода? Вы могли бы обновить свой вопрос.
Ответ №1:
Это может помочь. Но если это не так, вы могли бы уточнить свой вопрос.
import tensorflow as tf
tensor = tf.Variable(
[[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0]])
with tf.Session() as sess :
sess.run( tf.global_variables_initializer() )
print(sess.run( tf.assign(tensor[0:1,2:3] , [[9]] )))
Вывод такой.
[[0 0 9 1 0]
[0 0 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
И если вы измените последнюю строку на print(sess.run( tf.assign(tensor[0:1,2:4] , [[9,9]] )))
вы получите
[[0 0 9 9 0]
[0 0 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
Когда я не гарантирую, что левая часть присваивания не соответствует правой стороне с точки зрения формы, я получаю эту ошибку. Это должно вам помочь.
форма l-значения среза [1,2] не соответствует форме r-значения [1,1]
И пример print(sess.run( tf.assign(tensor[0:2,2:4] , [[9,9],[9,9]] )))
выводит
[[0 0 9 9 0]
[0 0 9 9 0]
[0 1 1 1 0]
[0 1 1 1 0]]
Комментарии:
1. Большое спасибо! Я решаю согласованность значений слева и справа, указывая их размеры.