如何获取numpyarray前N个最⼤值
主要应⽤了argsort()函数,函数原型:
numpy.argsort(a, axis=-1, kind='quicksort', order=None)
'''
Returns the indices that would sort an array.
Perform an indirect sort along the given axis using the algorithm specified by the kind keyword. It returns an array of indices of the same shape as a that index data along the given axis in sorted order.
'''
Parameters:
a : array_like
Array to sort.
axis : int or None, optional
Axis along which to sort. The default is -1 (the last axis). If None, the flattened array is used.
kind : {‘quicksort', ‘mergesort', ‘heapsort', ‘stable'}, optional
Sorting algorithm.
order : str or list of str, optional
When a is an array with fields defined, this argument specifies which fields to compare first, second, etc. A single field can be specified as a string, and not all fields need be specified, but unspecified fields will still be used, in the order in which they come up in Returns:
index_array : ndarray, int
Array of indices that sort a along the specified axis. If a is one-dimensional, a[index_array] yields a sorted a. More generally, np.take_along_axis(a, index_array, axis=a) always yields the sorted a, irrespective of dimensionality.
⽰例:
import numpy as np
top_k=3
arr = np.array([1, 3, 2, 4, 5])
top_k_idx=arr.argsort()[::-1][0:top_k]
print(top_k_idx)
#[4 3 1]
补充:python topN / topK 取最⼤的N个数或最⼩的N个数
import numpy as np
a = np.array([1,4,3,5,2])
b = np.argsort(a)sort of和kind of
print(b)
print结果[0 4 2 1 3]
说明a[0]最⼩,a[3]最⼤
a[0]<a[4]<a[2]<a[1]<a[3]
补充:利⽤Python获取数组或列表中最⼤的N个数及其索引
看代码吧~
import heapq
a=[43,5,65,4,5,8,87]
re1 = heapq.nlargest(3, a) #求最⼤的三个元素,并排序
re2 = map(a.index, heapq.nlargest(3, a)) #求最⼤的三个索引    nsmallest与nlargest相反,求最⼩
print(re1)
print(list(re2)) #因为re2由map()⽣成的不是list,直接print不出来,添加list()就⾏了
结果:
re1:[87, 65, 43]
re2:[6, 2, 0]
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。