共计 1648 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 这篇文章主要介绍了获取 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] 最大
补充:利用 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]
以上为个人经验,希望能给大家一个参考。
正文完
星哥说事-微信公众号
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)