如何獲取numpy array前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 the dtype, to break ties. 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) 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]
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Python Numpy教程之排序,搜索和計數詳解
- 淺談numpy.where() 的用法和np.argsort()的用法說明
- python數組排序方法之sort、sorted和argsort詳解
- Numpy實現矩陣運算及線性代數應用
- Python數組變形的幾種實現方法