将多维张量中的值映射到另一个值

时间:2019-01-09 16:20:55

标签: python numpy tensorflow mapping tensor

我有一个整数的4维张量,我想将一个值映射到另一个。我不确定在tensorflow中执行此操作的有效方法是什么。

如果它是一个numpy数组,我将执行以下操作:

arrayNew = np.zeros(arrayOld.shape, dtype=arrayOld.dtype) arrayNew[arrayOld == valOld] = valNew

所以我基本上是希望将此代码转换为张量流。

1 个答案:

答案 0 :(得分:1)

假设您只想用一个标量值替换另一个标量值,也许最简单的方法是减去旧值并添加新值:

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

对于无符号类型可能是有问题的(因为减法会产生负值),但是它实际上可以正常工作,负值只会溢出并且结果最终正确。