如何在TensorFlow中为布尔掩码每个元素后追加False以翻倍尺寸?
当然可以搞定这个需求!在TensorFlow里有好几种简洁的方式,能给你的布尔掩码每个元素后面都追加一个False,直接把张量长度翻倍。我给你分享几个实用的方案:
方法一:扩展维度拼接法
这个方法逻辑最直观——先把原掩码的每个元素单独拆成一个「列」,再和同形状的全False列拼接,最后把二维张量展平成一维就行:
import tensorflow as tf # 原掩码张量 mask = tf.constant([True, False, True, False]) # 扩展维度,把一维张量变成(4, 1)的二维张量 expanded_mask = tf.expand_dims(mask, axis=1) # 创建和扩展后形状完全一致的全False张量 false_padding = tf.zeros_like(expanded_mask, dtype=tf.bool) # 在最后一维拼接,得到(4, 2)的二维张量 combined = tf.concat([expanded_mask, false_padding], axis=1) # 展平成目标一维张量 result = tf.reshape(combined, [-1]) print(result.numpy()) # 输出: [ True False False False True False False False]
方法二:重复后索引修正法
先把原掩码直接重复成2倍长度,再通过索引筛选出需要保留原值的位置,其余位置强制设为False:
import tensorflow as tf mask = tf.constant([True, False, True, False]) # 把原掩码重复2次,得到长度为8的张量:[True,False,True,False,True,False,True,False] tiled_mask = tf.tile(mask, [2]) # 创建索引条件:只保留偶数位置(第0、2、4、6位)的原数值 keep_original = tf.range(tf.size(tiled_mask)) % 2 == 0 # 用where实现:满足条件的保留原数值,否则设为False result = tf.where(keep_original, tiled_mask, tf.constant(False, dtype=tf.bool)) print(result.numpy()) # 同样得到目标结果
方法三:堆叠展平法
这是最简洁的写法之一——直接把原掩码和全False张量堆叠成二维,再转置展平:
import tensorflow as tf mask = tf.constant([True, False, True, False]) # 堆叠原掩码和全False张量,再展平 result = tf.reshape(tf.stack([mask, tf.zeros_like(mask)], axis=1), [-1]) print(result.numpy()) # 输出符合预期
这几种方法都能完美实现你的需求,你可以根据自己的代码场景选择最顺手的方式~
内容的提问来源于stack exchange,提问作者Recep26
相关产品推荐
相关产品推荐

