tensor进阶操作

利用where分离采样 条件生成tensor 方便集成到GPU操作

 cond = torch.rand(2,2)
 print(cond)
 x = torch.full((2,2),0)
 y = torch.full((2,2),1)
 print(x,y)
 print(torch.where(cond>0.5,x,y))
 
 # 输出
 tensor([[0.1972, 0.7155],
         [0.1433, 0.4061]])
 tensor([[0, 0],
         [0, 0]]) tensor([[1, 1],
         [1, 1]])
 tensor([[1, 0],
         [1, 1]])

利用gather去生成tensor

 prob = torch.randn(4,10)
 print(prob)
 # 取前3个
 idx = torch.topk(prob,k=3,dim=1)
 print(idx)
 # 取索引 0是values 1是indices
 idx = idx[1]
 print(idx)
 label = torch.arange(10)+100
 print(label)
 # 收集操作 在10上面按照idx索引去取3个数 生成一个4*3的tensor
 print(torch.gather(label.expand(4,10),dim=1,index=idx.long()))
 
 # 输出
 tensor([[ 0.0531, -1.2249,  0.5703,  0.0761,  0.8663, -0.1629,  0.9500,  0.0922,
           1.8402,  0.0739],
         [ 0.8711,  0.1074, -0.1470,  0.4045,  0.8324, -0.1579, -0.8552,  0.7839,
          -0.4561, -1.0336],
         [-1.0648, -1.2761,  1.5125,  0.9560,  0.3319,  0.1883, -0.3136, -0.8152,
          -0.6352, -1.3613],
         [ 0.3234, -0.5314,  0.4066, -0.2229, -1.4734,  0.7634, -0.7972, -0.2334,
           0.2935, -0.1512]])
 torch.return_types.topk(
 values=tensor([[1.8402, 0.9500, 0.8663],
         [0.8711, 0.8324, 0.7839],
         [1.5125, 0.9560, 0.3319],
         [0.7634, 0.4066, 0.3234]]),
 indices=tensor([[8, 6, 4],
         [0, 4, 7],
         [2, 3, 4],
         [5, 2, 0]]))
 tensor([[8, 6, 4],
         [0, 4, 7],
         [2, 3, 4],
         [5, 2, 0]])
 tensor([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
 tensor([[108, 106, 104],
         [100, 104, 107],
         [102, 103, 104],
         [105, 102, 100]])
最后修改:2021 年 12 月 20 日
如果觉得我的文章对你有用,请随意赞赏