Порядок возврата массива NumPy - PullRequest
4 голосов
/ 15 марта 2012

Я пытаюсь вернуть массив, который имеет ранг каждого значения в массиве. Например, учитывая массив ниже:

import numpy as np
arr1 = np.array([4, 5, 3, 1])

Я бы хотел вернуть массив:

array([2, 3, 1, 0])

Таким образом, что значения в возвращенном массиве указывают возрастающий порядок массива (т. Е. Значение в возвращенном массиве указывает, какой из них является наибольшим). Используя argsort, я могу только сказать, как значения должны быть переупорядочены:

arr1.argsort()
array([3, 2, 0, 1])

Дайте мне знать, если это неясно.

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Возможно, есть лучший способ, но я всегда делал argsort().argsort():

>>> import numpy as np
>>> a = np.random.random(5)
>>> a
array([ 0.54254555,  0.4547267 ,  0.50008037,  0.20388227,  0.13725801])
>>> a.argsort().argsort()
array([4, 2, 3, 1, 0])
1 голос
/ 15 марта 2012

Предполагая, что [2,3,0,1] является опечаткой для [2,3,1,0], вы можете использовать lexsort :

>>> import numpy as np
>>> arr1 = np.array([4,5,3,1])
>>> np.lexsort((np.arange(len(arr1)), arr1.argsort()))
array([2, 3, 1, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...