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_update
here) 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"