Ordering @ Ordering and Ranking Permutations

Как указано nazdrovje (см. здесь ) Упорядочивание @ Упорядочивание может использоваться для получения ранга каждого элемента в списке. Даже когда список содержит повторяющиеся элементы, результатом является n -перестановка (принимаемая как упорядоченный список целых чисел от 1 до n без повторения), где элементу с наименьшим рангом присваивается 1, второму наименьшему - 2 и т. Д. .Как указал Анджей Козловский , справедливо следующее (см. Также здесь ):

(Sort@mylist)[[Ordering@Ordering@mylist]]==mylist

Я хотел бы произвести перестановку ранжирования, где наивысшее ранжированному элементу присваивается 1, второму наивысшему 2 и т. д., так что выполняется следующее:

(Reverse@Sort@mylist)[[newPermutation]]==mylist

Это кажется простым, но я смог придумать только довольно неудобное решение. На данный момент я делаю следующее:

newPermutation= Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]

Есть ли более элегантный или более интуитивный способ? Там обязательно должно быть?

Пример:

mylist= {\[Pi],"abc",40,1, 300, 3.2,1};

Ordering@Ordering@mylist

Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]

Выходные данные (обратите внимание на взаимную связь между перестановками)

{7,6,4,1,5,3,2}
{1,2,4,7,3,5,6}

(Оба следующих значения имеют значение True)

Sort@mylist)[[Ordering@Ordering@mylist]]== mylist
Reverse@Sort@mylist)[[ Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]]]== mylist

6
задан Community 23 May 2017 в 12:25
поделиться