Hi everyone,
I stumbled over the following problem that I couldn’t solve myself:
Given a 4 x n tensor A
which might contain non-unique columns, I’m looking for a way to get the column index of a single (could be the first, but does not have to) occurrence of each column.
Fore example given the tensor A
(note that column 1 and 5 are identical)
tensor([[10., 11., 11., 11., 11., 11., 13., 13., 14., 14.],
[ 0., 2., 0., 1., 1., 2., 1., 1., 0., 0.],
[ 3., 6., 6., 2., 6., 6., 9., 3., 4., 7.],
[ 2., 3., 10., 10., 10., 3., 5., 6., 6., 9.]])
I would like to obtain the following indices
tensor([[ 0., 1., 2., 3., 4., 6., 7., 8., 9.]]) # Index of 1st occurrence
# or
tensor([[ 0., 2., 3., 4., 5., 6., 7., 8., 9.]]) # Index of 2nd occurrence
If getting the indices of the columns is not possible, a mask would also do:
tensor([[ 1., 1., 1., 1., 1., 0., 1., 1., 1., 1.]]) # Masking 2nd occurrence
# or
tensor([[ 1., 0., 1., 1., 1., 1., 1., 1., 1., 1.]]) # Masking 1st occurrence
I hope it is somewhat clear what I’m trying to achieve. Maybe I’m over-complicating things and there is an easier way around this (see background information below). In any case help is really appreciated =)
Cheers!
Background information
The columns of the tensor A
above represents the locations of targets in a 4D grid. The targets themselves are stored in a tensor of the same length of A
. When constructing my loss, I need to make sure, that there is only one target in each grid cell. My idea is to search the tensor A
for non-unique columns and then only keep the column index of a single occurrence. Using this list of indices I could then select the valid targets.