【问题标题】:Turn the two highest values of a pytorch tensor / numpy array to 1 and the others to zero [duplicate]将pytorch张量/ numpy数组的两个最高值变为1,将其他值变为0 [重复]
【发布时间】:2021-08-18 20:44:59
【问题描述】:

我有一些 pytorch 张量(或 numpy 数组),想将两个最高的数字变为 1,将其他每个数字变为零。所以这个张量

tensor([0.9998, 0.9997, 0.9991, 0.9998, 0.9996, 0.9996, 0.9997, 0.9995],
   dtype=torch.float64)

应该变成这样:

tensor([1, 0, 0, 1, 0, 0, 0, 0],
   dtype=torch.float64)

有一些方法可以将最大数字变为 1,其他数字变为 0,但我需要将两个最大数字变为 1。为什么没有内置函数呢?我有一个分类问题,我知道两个对象属于第 1 类。所以这不应该是一个很常见的问题吗?

【问题讨论】:

    标签: python numpy pytorch


    【解决方案1】:

    您可以使用topk

    x = tensor([0.9998, 0.9997, 0.9991, 0.9998, 0.9996, 0.9996, 0.9997, 0.9995], dtype=torch.float64)
    
    _, idx = x.topk(2)
    
    x.fill_(0)
    x[idx] = 1
    

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2018-12-30
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多