python - 以最快的方式确定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 使其更快。
解决方案
(这是我其他答案的变体。在这里,我们不是拆分大数组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)]
推荐阅读
- python - 如何从 Pytorch 张量中去掉每一列都用零填充?
- c++ - 我应该如何释放不使用“new”关键字创建的对象的内存?
- debugging - 在例程中间调用地址
- metal - 如何使用 Metal 在渲染图像上绘制形状而不重绘整个纹理?
- r - 如何为堆积条形图中的两列着色
- android - 无法从 Firebase 检索数据
- android - 为什么微调器项目样式有效,但微调器下拉项目样式失败?
- javascript - Edge 中的 OIDC 客户端问题
- javascript - ASP.NET 和 C#:在键入和粘贴时从 asp.TextBox 中删除空格
- firebase - 编译的 Jar 不断抛出: SynchronizationContext 中未捕获的异常