Если вы просто хотите заменить одно скалярное значение другим, возможно, самый простой способ - вычесть старое значение и добавить новое:
import tensorflow as tf
# Inputs
arrayOld = tf.placeholder(tf.int8)
valOld = tf.placeholder(tf.int8, ())
valNew = tf.placeholder(tf.int8, ())
# Find positions to replace
mask = tf.cast(tf.equal(arrayOld, valOld), arrayOld.dtype)
# Make new array
arrayNew = arrayOld + (valNew - valOld) * mask
with tf.Session() as sess:
print(sess.run(arrayNew, feed_dict={
arrayOld: [[12, 20, 32, 17, 20],
[31, 15, 20, 25, 14]],
valOld: 20, valNew: 10}))
Выход:
[[12 10 32 17 10]
[31 15 10 25 14]]
РЕДАКТИРОВАТЬ: Первоначально, я думал, что строка
arrayNew = arrayOld + (valNew - valOld) * mask
может быть проблематично для типов без знака (из-за вычитания, дающего отрицательные значения), но на самом деле оно работает нормально, отрицательные значения просто переполняются, и результат в итоге получается правильным.