首页 > 解决方案 > 如何反转 argsort 以指向原始未排序数组?

问题描述

我对自己没有自己解决这个问题感到恼火;这很可能是微不足道的。但无论如何,假设我有一个未排序的数组和一个用于对其进行排序的 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]

我怎样才能最容易地从aff确定?ap

标签: pythonnumpysorting

解决方案


你不需要反转任何东西。请记住,这是与 的每个元素对应p的索引。的第 th 元素来自于的第 th 元素的索引:abfbafp

a[p[f]]

换句话说,

af = p[f]

推荐阅读