#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. Черт возьми, да! Действительно, большое спасибо. Что ж, по крайней мере, я был прав насчет того, что это тривиально…