在 pytorch 中,torch.unique 返回重复

In pytorch, torch.unique is returning repititions

我有这个二维张量:

tmp = torch.tensor([[ 0,  0,  0,  0,  1,  1,  1,  2,  2,  2,  3,  3,  3,  4,  4,  4,  5,  5,
          5,  6,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 10, 11, 11,
          11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 17,
          17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23,
          23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29,
          29, 29, 30, 30, 30, 31, 31, 31, 31],
        [ 0,  0,  0,  0,  1,  1,  1,  2,  2,  2,  3,  3,  3,  4,  4,  4,  5,  5,
          5,  6,  6,  6,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10, 10, 11, 11,
          11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15,  0, 16, 16, 17,
          17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23,
          23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29,
          29, 29, 30, 30, 30, 31, 31, 31, 31]])

所以第 2 行第 50 列中有 0。当我应用 torch.uniquedim=1,我得到:

a,c = torch.unique(tmp,dim=1,return_counts=True)
a
tensor([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 16,
         17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
        [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,  0, 16,
         17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]])

可以看出输出的第二行有两个0,第一行有两个16。我是不是做错了什么或者这很可疑?

因为您指定了dim=1。因此,PyTorch 正在检查唯一的 (它正确地做了)。像 (0, 0)、(1, 1)、(16, 0):这些是它生成的唯一对。一般来说,对 (temp[0,i], temp[1,i]) 对所有 i.

都是唯一的

如果你想让所有的元素都是唯一的,就扔掉dimtorch.unique(tmp).

如果您需要维护两个列表结构,则不能将输出存储为单个张量,因为它们的大小可能不匹配。您可以执行类似 output1 = torch.unique(tmp[0])output2 = torch.unique(tmp[1]).

的操作