App下載

怎么獲取numpy的array中前N個(gè)最大值?

著名奶茶鑒定家 2021-08-09 17:04:28 瀏覽數(shù) (4464)
反饋

numpy中的array比python的數(shù)組(列表)的功能更加豐富,比如我們可以用numpy獲取array中的最大值和前N個(gè)最大值。那么我們要如何操作才能獲取到array中的錢(qián)N個(gè)最大值呢?接下來(lái)這篇文章帶你了解。

主要應(yīng)用了argsort()函數(shù),函數(shù)原型:

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]

補(bǔ)充:python topN / topK 取 最大的N個(gè)數(shù) 或 最小的N個(gè)數(shù)

import numpy as np
a = np.array([1,4,3,5,2])
b = np.argsort(a)
print(b)

print結(jié)果[0 4 2 1 3]

說(shuō)明a[0]最小,a[3]最大

a[0]<a[4]<a[2]<a[1]<a[3]

補(bǔ)充:利用Python獲取數(shù)組或列表中最大的N個(gè)數(shù)及其索引

看代碼吧~

import heapq
 
a=[43,5,65,4,5,8,87]
re1 = heapq.nlargest(3, a) #求最大的三個(gè)元素,并排序
re2 = map(a.index, heapq.nlargest(3, a)) #求最大的三個(gè)索引    nsmallest與nlargest相反,求最小
print(re1)
print(list(re2)) #因?yàn)閞e2由map()生成的不是list,直接print不出來(lái),添加list()就行了

結(jié)果:

re1:[87, 65, 43]

re2:[6, 2, 0]

以上就是numpy獲取array中前N個(gè)最大值的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持W3Cschool。


0 人點(diǎn)贊