如何用无循环的高效numpy方法获取bincount各分箱对应的元素索引ndarray
实现方案
你需要的结果可以直接通过NumPy内置的排序函数实现,全程无显式循环,性能优异:
import numpy as np x = np.array([0, 1, 1, 0, 2]) # 直接对原数组的值做稳定排序,返回的索引就是你需要的结果 res = np.argsort(x, kind='stable') print(res) # 输出:[0 3 1 2 4]
实现说明
np.argsort()的作用是返回将数组元素从小到大排序后对应的原位置索引,天然符合「按分箱顺序依次输出各分箱内元素索引」的需求,和你给出的预期输出完全一致。- 添加
kind='stable'参数可以保证同一个分箱内的索引严格按照在原数组中出现的先后顺序排列,和示例输出的顺序完全匹配;如果不需要同箱内的顺序要求,去掉该参数可以获得更高的执行效率。 - 该方案经过NumPy底层优化,即使处理百万级规模的数组也能在毫秒级完成,完全满足绝大多数场景的性能需求。
内容的提问来源于stack exchange,提问作者alexanderb14
相关产品推荐
相关产品推荐

