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

PyTorch广播筛选张量时报Boolean value of Tensor错误如何解决

问题原因

你遇到的报错本质是Python原生的not in运算符不支持PyTorch张量的逐元素判断:

  • 你写的torch.arange(Sim.size(0)) not in samples_idx逻辑是Python尝试把整个形状为(5,)的张量作为单个对象,判断它是否不在samples_idx列表里,而不是逐元素判断每个值是否不在列表中
  • PyTorch无法把包含多个值的张量直接转换为单个布尔值,因此触发RuntimeError: Boolean value of Tensor with more than one value is ambiguous报错。
正确实现方式

推荐用PyTorch内置的torch.isin()接口实现逐元素存在性判断,再取反得到「不在指定索引列表」的布尔掩码:

import torch

Sim = torch.rand((5, 5))
samples_idx = [0]  # 需要排除的索引
# 生成逐元素判断的布尔掩码:~是按位取反,对应不在列表中的条件
a = ~torch.isin(torch.arange(Sim.size(0)), torch.tensor(samples_idx))
result = Sim[a]

运行后a就是你预期的形状为(5,)的布尔张量,result会保留Sim中索引不为0的所有行。

如果使用的PyTorch版本低于1.10(无torch.isin接口),可以用广播比对实现相同逻辑:

a = (torch.arange(Sim.size(0)).unsqueeze(1) != torch.tensor(samples_idx)).all(dim=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:00