How to do a sort that returns the ranking of the numbers in pytorch

Hi, everyone. I am wondering how to do a sort that returns the ranking of the numbers?
For example:
a = torch.tensor([[ 1,2,3],[5,6,1]])
the output of torch.argsort(a,axis=1) is tensor([[ 0,1,2],[2,0,1]]), in which the numbers represent the original positions of those cols. But what I want is tensor([[ 0,1,2],[1,2,0]]), in which the number represent the ranking of the original data in that col . Thanks for your attention and time.

Hi Tim!

Think of the indices returned by argsort() as permutations. If I understand
what you are asking, you want the inverses of those permutations. They
can be computed as follows:

>>> import torch
>>> torch.__version__
'2.1.1'
>>> a = torch.tensor ([[ 1,2,3], [5,6,1]])
>>> asrt = torch.argsort (a, dim = 1)
>>> asrt
tensor([[0, 1, 2],
        [2, 0, 1]])
>>> torch.empty(2, 3, dtype = torch.long).scatter_ (1, asrt, torch.arange (3).repeat (2, 1))
tensor([[0, 1, 2],
        [1, 2, 0]])

Best.

K. Frank

1 Like