You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:21:33