使用 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])
我有一个索引数组,如 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])