Skip to content Skip to sidebar Skip to footer

How To Do Slice Assignment While The Slice Itself Is A Tensor In Tensorflow

I want to do slice assignment in tensorflow. I got to know that I can use: my_var = my_var[4:8].assign(tf.zeros(4)) base on this link. as you see in my_var[4:8] we have specific i

Solution 1:

This example (extended from tf documentation tf.scatter_nd_updatehere) should help.

You want to first combine your row_indices and column_indices into a list of 2d indices, which is indices argument to tf.scatter_nd_update. Then you fed a list of expected values, which is updates.

ref = tf.Variable(tf.zeros(shape=[8,4], dtype=tf.float32))
indices = tf.constant([[0, 2], [2, 2]])
updates = tf.constant([1.0, 2.0])

update = tf.scatter_nd_update(ref, indices, updates)
with tf.Session() as sess:
  sess.run(tf.initialize_all_variables())
  print sess.run(update)
Result:

[[ 0.  0.  1.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  2.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

Specifically for your data,

ref = tf.Variable(tf.zeros(shape=[8,4], dtype=tf.float32))
changed_tensor = [[8.3356,    0.,        8.457685 ],
                  [0.,        6.103182,  8.602337 ],
                  [8.8974,    7.330564,  0.       ],
                  [0.,        3.8914037, 5.826657 ],
                  [8.8974,    0.,        8.283971 ],
                  [6.103182,  3.0614321, 5.826657 ],
                  [7.330564,  0.,        8.283971 ],
                  [6.103182,  3.8914037, 0.       ]]
updates = tf.reshape(changed_tensor, shape=[-1])
sparse_indices = tf.constant(
[[1, 1],
 [2, 1],
 [5, 1],
 [1, 2],
 [2, 2],
 [5, 2],
 [1, 3],
 [2, 3],
 [5, 3],
 [1, 2],
 [4, 2],
 [6, 2],
 [1, 3],
 [4, 3],
 [6, 3],
 [2, 2],
 [3, 2],
 [6, 2],
 [2, 3],
 [3, 3],
 [6, 3],
 [2, 2],
 [4, 2],
 [4, 2]])

update = tf.scatter_nd_update(ref, sparse_indices, updates)
with tf.Session() as sess:
  sess.run(tf.initialize_all_variables())
  print sess.run(update)

Result:

[[ 0.0.0.0.        ]
 [ 0.8.33559990.8.8973999 ]
 [ 0.0.6.103181847.33056402]
 [ 0.0.3.061432120.        ]
 [ 0.0.0.0.        ]
 [ 0.8.457685478.602336880.        ]
 [ 0.0.5.826656828.28397083]
 [ 0.0.0.0.        ]]

Post a Comment for "How To Do Slice Assignment While The Slice Itself Is A Tensor In Tensorflow"