tensorflow изменяет / присваивает значения элементов матрицы по списку (с разным диапазоном 2d) срезов

#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. Большое спасибо! Я решаю согласованность значений слева и справа, указывая их размеры.