Как я могу отменить argsort, чтобы указать на исходный несортированный массив?

#python #numpy #sorting

Вопрос:

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

 a = array([83, 75, 60, 80, 20,  6,  37, 81,  7, 21])
p = a.argsort()
b = a[p]
 

Таким образом, массив b является отсортированной версией массива a . Теперь у меня есть функция, которая выбирает определенные значения из отсортированного списка; предположим, что эта функция возвращает список

 f = [0, 1, 2, 3, 6, 7]
 

Это индексы для отсортированного массива b . Но как мне «инвертировать» сортировку, чтобы я мог получить индексы, указывающие на соответствующие значения a ? В этом случае у нас есть

 b[f]
[ 6  7 20 21 75 80]
 

и соответствующие индексы для a являются

 af = [5, 8, 4, 9, 1, 3]
 

Как я могу наиболее легко определить af из f , a и p ?

Комментарии:

1. Сделали (я думаю) с большой благодарностью.

Ответ №1:

Вам не нужно ничего переворачивать. Помните, что p это индекс, a соответствующий каждому элементу b . f th элемент из b исходит из a индексированного с f th элементом из p :

 a[p[f]]
 

Другими словами,

 af = p[f]
 

Комментарии:

1. Черт возьми, да! Действительно, большое спасибо. Что ж, по крайней мере, я был прав насчет того, что это тривиально…