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

TensorFlow 2.0如何按行相等条件从已有张量提取值生成新张量

报错原因

你代码中的range(h)是错误触发点:range仅接收整数参数,而h是张量类型,无法直接传入range生成循环序列,因此抛出类型错误。

正确实现方案

方案1:修改你的现有写法

调整循环范围参数,最后将收集的行拼接为张量即可:

import tensorflow as tf

# 输入张量定义
h = tf.constant([[0,0,0],[0,0,1],[0,1,0]])
h2 = tf.constant([[0,0,0],[0,0,1],[0,0,1]])

# 取张量的第一维长度(行数)作为循环范围
tensor_list = [h[i] for i in range(h.shape[0]) if tf.reduce_all(tf.equal(h[i], h2[i]))]
# 拼接列表得到最终张量
h3 = tf.stack(tensor_list)

方案2:推荐向量化实现(效率更高)

直接使用TensorFlow原生的张量操作,无需Python循环,处理大张量时性能优势明显:

# 逐行判断是否完全相等,得到布尔掩码
equal_mask = tf.reduce_all(tf.equal(h, h2), axis=1)
# 用掩码过滤出相等的行
h3 = tf.boolean_mask(h, equal_mask)

两种方案输出的h3都符合预期结果:

tf.Tensor(
[[0 0 0]
 [0 0 1]], shape=(2, 3), dtype=int32)

内容的提问来源于stack exchange,提问作者Vitor Bento

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:51:01