Consider a source tensor src
and a destination tensor dst
of the same size:
src = torch.rand(n,m)
dst = torch.zeros_like(src)
Furthermore, let’s assume we are given an index tensor idx
of size (2,n*m)
in which each column idx[:,j]
contains a target index for the corresponding entry src.view(-1)[j]
. We can map src.view(-1)[j]
to its target index in dst
via
dst[tuple(idx)] = src.view(-1)
However, if this mapping is not 1-to-1, i.e., if several entries in src
map to the same entry in dst
, the evaluation order on the GPU seems to be random. In my case, though, I need to rely on a left-to-right evaluation, i.e., if a target index appears multiple times in idx
, I want to write the value in src
corresponding to the last appearance of the target index in idx
. Any ideas how to achieve this?