У меня есть нулевая матрица (мы можем просмотреть ее как картинку):
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]])
Это может помочь. Но если это не так, вы могли бы уточнить свой вопрос.
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]]
Когда я не гарантирую, что левая сторона задания не соответствует правой стороне с точки зрения формы, я получаю эту ошибку. Это должно помочь вам.
sliced l-value shape [1,2] does not match r-value shape [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]]
Большое спасибо! Я решаю согласованность левого и правого значений, указав их размеры.
Можете ли вы привести примеры ввода и вывода? Вы можете обновить свой вопрос.