下面的习惯用法比第二个 argsort (O(n log n)) 更便宜 (O(n))。
示例数组x
与排序顺序y
>>> x = np.random.random(10)
>>> y = x.argsort()[::-1]
构建逆i
>>> i = np.empty_like(y)
>>> i[y] = np.arange(y.size)
Check:
>>> x
array([0.44257134, 0.573158 , 0.07762422, 0.31507426, 0.43414726,
0.34923861, 0.22161337, 0.14090133, 0.66903264, 0.38888105])
>>> x[y]
array([0.66903264, 0.573158 , 0.44257134, 0.43414726, 0.38888105,
0.34923861, 0.31507426, 0.22161337, 0.14090133, 0.07762422])
>>> x[y][i]
array([0.44257134, 0.573158 , 0.07762422, 0.31507426, 0.43414726,
0.34923861, 0.22161337, 0.14090133, 0.66903264, 0.38888105])