首页 > 解决方案 > 以最快的方式确定Python中数组中每个组重复值的索引

问题描述

我想找到每个组重复值的索引,如下所示:

s = [2,6,2,88,6,...]

结果必须从original s:返回索引,[[0,2],[1,4],..]否则结果可以显示另一种方式。

我找到了很多解决方案,所以我找到了获得重复组的最快方法:

s = np.sort(a, axis=None)
s[:-1][s[1:] == s[:-1]]

但是在排序之后我得到了错误的索引original s

就我而言,我的名单上有大约 2 亿美元的价值,我想找到最快的方法来做到这一点。我使用数组来存储值,因为我想使用 GPU 使其更快。

标签: pythonperformancenumpyduplicates

解决方案


(这是我其他答案的变体。在这里,我们不是拆分大数组sorted_inds,而是从中获取切片,因此它可能具有不同类型的性能特征)

如果s是输入数组:

counts       = np.bincount(s)
cum_counts   = np.add.accumulate(counts)
sorted_inds  = np.argsort(s)

result = [sorted_inds[:cum_counts[0]]] + [sorted_inds[cum_counts[i]:cum_counts[i+1]] for i in range(cum_counts.size-1)]

推荐阅读