Tambahkan indeks tensor yang dipilih ke tensor lain dengan indeks yang tumpang tindih dalam pytorch
Ini adalah pertanyaan lanjutan dari pertanyaan ini . Saya ingin melakukan hal yang persis sama di pytorch. Apakah mungkin melakukan ini? Jika ya, bagaimana caranya?
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)
Saya butuh sesuatu seperti torch.add.at(warped_image, (iy, ix), image)
itu memberikan output sebagai
[[ 0. 0. 51.]
[246. 116. 0.]
[300. 211. 64.]]
Perhatikan bahwa indeks di (0,1)
dan (1,1)
menunjuk ke lokasi yang sama (0,2)
. Jadi, saya mau warped_image[0,2] = image[0,1] + image[1,1] = 51
.
Jawaban
3 Ivan
Apa yang Anda cari adalah torch.Tensor.index_put_dengan accumulate
set argumen ke 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]])
Atau, menggunakan versi out-place 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]])
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'