使用 NumPy 进行高效数组分组
虽然 NumPy 可能不提供专门为数组分组而设计的开箱即用函数,但有是可以有效实现类似目标的通用技术
受 Eelco 库的启发
一种方法受 Eelco Hoogendoorn 库的启发,通过利用输入数组的第一列单调递增的假设来简化它。如果没有,可以先使用 a = a[a[:, 0].argsort()] 进行排序。
np.split(a[:, 1], np.unique(a[:, 0], return_index=True)[1][1:])
唯一标识组
这个代码片段利用 np.unique() 来识别第一列中的唯一值,并返回它们的索引。这些索引用于将第二列拆分为代表每个组的单独子数组。
时间复杂度和性能
此方法表现出 O(n) 复杂度,使其高度高效的。对不同组大小的数组进行的经验 timeit 测量证实了其相对于 pandas、numpy-indexed 和 defaultdict 等其他方法的性能优势。
替代解决方案
超越所提出的方法,也可以探索基于 NumPy 的技术(例如 numpy_groupies)进行分组
其他注意事项
如果输入数组的第一列未排序,建议在分组之前对其进行排序,以确保结果准确。请记住,某些排序算法(例如 argsort)的时间复杂度为 O(n log(n))。
以上是如何有效地对 NumPy 数组进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!