TensorFlow中统计形状(?,2)张量对应第二列为0的不同第一列值数量
解决张量中特定列的统计问题
我来帮你搞定这个统计需求!核心就是找出第一列的不同值中,哪些在对应的第二列里出现过0,最后统计这些值的数量。不管用PyTorch还是NumPy都能轻松实现,下面我用PyTorch来演示(毕竟你提到的是张量):
核心思路
咱们分三步走:
- 第一步:筛选出所有第二列值为0的行,这些行是我们的重点关注对象
- 第二步:从这些行里提取第一列的数值,然后去重得到唯一值集合
- 第三步:统计这个唯一值集合的元素个数,就是最终答案
代码实现与示例验证
示例1(你的初始示例)
import torch # 初始示例张量 T = torch.tensor([[0,1], [0,2], [0,0], [1, 4], [1, 3], [2,0], [2,0], [2,0],[2,0]]) # 步骤1:生成布尔掩码,标记第二列为0的行 mask = T[:, 1] == 0 # 步骤2:筛选出符合条件的行,提取第一列并去重 unique_first_vals = torch.unique(T[mask][:, 0]) # 步骤3:统计数量 count = len(unique_first_vals) print(count) # 输出:2,和预期一致
示例2(仅第一列值为2时对应第二列有0)
T2 = torch.tensor([[0,1], [0,2], [0,1], [1, 4], [1, 3], [2,0], [2,0], [2,0],[2,0]]) count2 = len(torch.unique(T2[T2[:,1]==0][:,0])) print(count2) # 输出:1,正确
示例3(第一列值为2和3时对应第二列有0)
T3 = torch.tensor([[0,1], [0,2], [0,1], [1, 4], [1, 3], [2,0], [2,0], [2,0],[2,0],[3,0]]) count3 = len(torch.unique(T3[T3[:,1]==0][:,0])) print(count3) # 输出:2,正确
简化写法
如果想更简洁,直接把三步合并成一行代码就行:
count = len(torch.unique(T[T[:, 1] == 0][:, 0]))
扩展:用NumPy实现
如果你用的是NumPy数组,逻辑完全一样,只需要替换对应的函数:
import numpy as np T_np = np.array([[0,1], [0,2], [0,0], [1, 4], [1, 3], [2,0], [2,0], [2,0],[2,0]]) count_np = len(np.unique(T_np[T_np[:,1]==0][:,0])) print(count_np) # 输出:2
内容的提问来源于stack exchange,提问作者walkerlala
相关产品推荐
相关产品推荐

