使用 NumPy 对索引数组进行 argsort 的任何有效模拟?

Any efficient analogue of argsort for array of indices with NumPy?

我有一个索引数组,如 a = [2, 4, 1, 0, 3],我想将其转换为 np.argsort(a) = [3, 2, 0, 4, 1]。 问题是 argsort 有 O(n*log(n)) 时间,但对于我来说它可能是 O(n) 我什至有代码:

b = np.zeros(a.size)
for i in range(a.size):
    b[a[i]] = i

第二个问题是 Python 中的循环很慢,我希望可以使用一些 NumPy 技巧来实现目标。

你有从 0 到 len(a)-1 的所有数字吗?

然后使用智能索引:

a = [2, 4, 1, 0, 3]

b = np.empty(len(a), dtype=int) # or b = np.empty_like(a)
b[a] = np.arange(len(a))
b

输出:array([3, 2, 0, 4, 1])