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

如何比较多维Tensor?计算结果与预期不符问题求助

问题分析与解决方法

问题原因

你的代码中t.all(a.eq(b))是对整个张量的所有元素做全局相等判断——只要存在任意一个元素不等,结果就会是False,后续sum()会把False转为0,所以输出0。但你需要的是统计第一个维度中,与b对应子张量完全相等的数量,因此必须指定判断的维度范围。

解决代码

import torch as t
a = t.tensor([[[[1.0, 2.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]],[[1.0, 2.0], [2.0, 3.0]]], [[[1.0, 2.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]],[[1.0, 2.0], [2.0, 3.0]]],[[[1.0, 2.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]],[[1.0, 2.0], [2.0, 3.0]]]])

b = t.tensor([[[[1.0, 2.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]],[[1.0, 2.0], [2.0, 3.0]]], [[[1.0, 2.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]]],[[[1.0, 1.0], [3.0, 2.0]],[[1.0, 2.0], [2.0, 3.0]],[[1.0, 2.0], [2.0, 3.0]]]])

# 对每个第一个维度的子张量(后3个维度:3,2,2)做全相等判断
eq_per_subtensor = t.all(a.eq(b), dim=(1, 2, 3))
ans = eq_per_subtensor.sum()

print(ans)  # 输出 tensor(1)

关键说明

  1. a.eq(b):生成与原张量同形状的布尔张量,每个位置表示对应元素是否相等。
  2. t.all(..., dim=(1,2,3)):指定对后三个维度(即每个(3,2,2)的子张量)做全量相等判断,得到形状为(3,)的布尔数组,每个元素对应第一个维度中子张量是否完全相等。
  3. sum():将布尔数组中的True转为1、False转为0,求和后得到符合条件的子张量数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:52:33