我有一个非常大的数组,包含介于0和N之间的整数,每个值至少出现一次。
我想知道对于每个值 k,我的数组中所有等于 k 的值的索引。
例如:
arr = np.array([0,1,2,3,2,1,0])
desired_output = {
0: np.array([0,6]),
1: np.array([1,5]),
2: np.array([2,4]),
3: np.array([3]),
}
目前我是通过循环range(N+1)
,并且调用np.where
N次来实现这个目标的。
indices = {}
for value in range(max(arr)+1):
indices[value] = np.where(arr == value)[0]
这个循环是我代码中最慢的部分。(无论是
arr==value
评估还是np.where
调用都占用了大量时间。)有没有更有效率的方法来完成这个任务?我也尝试过使用
np.unique(arr, return_index=True)
,但它只告诉我第一个索引,而不是所有的索引。