米琪卡哇伊
更新的NumPy版本(1.8及以上)有一个名为argpartition为了这个。要获得四大元素的指数,请执行以下操作>>> a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])>>> a
array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])>>> ind = np.argpartition(a, -4)[-4:]>>> ind
array([1, 5, 8, 0])>>> a[ind]array([4, 9, 6, 9])不像argsort,该函数在最坏的情况下以线性时间运行,但返回的索引没有排序,从计算结果可以看出。a[ind]..如果你也需要的话,把它们整理一下:>>> ind[np.argsort(a[ind])]array([1, 8, 5, 0])为了得到最高层-k按排序顺序排列的元素以这种方式取O(n + k原木k)时间。
心有法竹
用途:>>> import heapq>>> import numpy>>> a = numpy.array([1, 3, 2, 4, 5])>>> heapq.nlargest(3, range(len(a)), a.take)[4, 3, 1]对于常规Python列表:>>> a = [1, 3, 2, 4, 5]>>> heapq.nlargest(3, range(len(a)), a.__getitem__)[4, 3, 1]如果使用Python 2,请使用xrange而不是range.资料来源:堆队列算法