## Question

Asked By – joshayers

I have an array of numbers and I’d like to create another array that represents the rank of each item in the first array. I’m using Python and NumPy.

For example:

```
array = [4,2,7,1]
ranks = [2,1,3,0]
```

Here’s the best method I’ve come up with:

```
array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.arange(len(array))[temp.argsort()]
```

Are there any better/faster methods that avoid sorting the array twice?

**Now we will see solution for issue: Rank items in an array using Python/NumPy, without sorting array twice **

## Answer

Use *advanced indexing* on the left-hand side in the last step:

```
array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.empty_like(temp)
ranks[temp] = numpy.arange(len(array))
```

This avoids sorting twice by inverting the permutation in the last step.

This question is answered By – Sven Marnach

**This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **