numpy中的array比python的数组(列表)的功能更加丰富,比如我们可以用numpy获取array中的最大值和前N个最大值。那么我们要如何操作才能获取到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]
以上就是numpy获取array中前N个最大值的全部内容了,希望能给大家一个参考,也希望大家多多支持W3Cschool。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。