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

2024-09-29 04:22:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个整数的四维张量,我想把一个值映射到另一个。我不确定在tensorflow中什么是有效的方法。你知道吗

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

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

所以我基本上是想把这段代码翻译成tensorflow。你知道吗


Tags: 方法代码numpytensorflownpzeros整数数组
1条回答
网友
1楼 · 发布于 2024-09-29 04:22:40

假设您只想用另一个标量值替换一个标量值,那么最简单的方法可能是减去旧值,然后添加新值:

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

对于无符号类型可能有问题(因为减法会产生负值),但实际上效果很好,负值只是溢出,结果是正确的。你知道吗

相关问题 更多 >