在pytorch中将索引选定张量添加到另一个具有重叠索引的张量

时间:2021-01-05 18:12:12

标签: numpy pytorch

这是 this question 的后续问题。我想在 pytorch 中做同样的事情。是否有可能做到这一点?如果是,如何?

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="section">

    <div class="container">
    
      <p>
          This is the section 1 content
      </p>
      
      <div class="extraClick">
          Click Me
      </div>

    </div>
    
    <div class="extra">
         This is some extra content
    </div>

</div>

<div class="section">

    <div class="container">
    
      <p>
          This is the section 2 content
      </p>
      
      <div class="extraClick">
          Click Me
      </div>

    </div>
    
    <div class="extra">
         This is some extra content
    </div>

</div>

<div class="section">

    <div class="container">
    
      <p>
          This is the section 3 content
      </p>
      
      <div class="extraClick">
          Click Me
      </div>

    </div>
    
    <div class="extra">
         This is some extra content
    </div>

</div>

我需要像 import torch image = torch.tensor([[246, 50, 101], [116, 1, 113], [187, 110, 64]]) iy = torch.tensor([[1, 0, 2], [1, 0, 2], [2, 2, 2]]) ix = torch.tensor([[0, 2, 1], [1, 2, 0], [0, 1, 2]]) warped_image = torch.zeros(size=image.shape) 这样的东西来提供输出

torch.add.at(warped_image, (iy, ix), image)

请注意,[[ 0. 0. 51.] [246. 116. 0.] [300. 211. 64.]] (0,1) 处的索引指向相同的位置 (1,1)。所以,我想要(0,2)

1 个答案:

答案 0 :(得分:3)

您要查找的是 torch.Tensor.index_put_,其中 accumulate 参数设置为 True

>>> warped_image = torch.zeros_like(image)

>>> warped_image.index_put_((iy, ix), image, accumulate=True)
tensor([[  0,   0,  51],
        [246, 116,   0],
        [300, 211,  64]])

或者,使用外置版本 torch.index_put

>>> torch.index_put(torch.zeros_like(image), (iy, ix), image, accumulate=True)
tensor([[  0,   0,  51],
        [246, 116,   0],
        [300, 211,  64]])