पाइटरॉच में ओवरलैपिंग सूचकांकों के साथ दूसरे टेंसर में एक इंडेक्स चयनित टेंसर जोड़ें

Jan 06 2021

यह इस प्रश्न का अनुवर्ती प्रश्न है । मैं पाइटोरेक में ठीक यही काम करना चाहता हूं। क्या इसे करना संभव है? यदि हाँ, तो कैसे?

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)। इसलिए, मुझे चाहिए warped_image[0,2] = image[0,1] + image[1,1] = 51

जवाब

3 Ivan Jan 06 2021 at 01:23

आप 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]])