numpy - python - 在numpy矩阵中,找到第n个最大值的最快方法

147 2

对于单个数组,有很多解决方案,但是有个像这样的矩阵:


>>> k


array([[ 35, 48, 63],


 [ 60, 77, 96],


 [ 91, 112, 135]])



可以使用k.max(),但是,这只返回最大值,135 ,如果我想要第二个或第三个值?

时间: 原作者:

127 0

你可以对矩阵进行展平处理,然后对它进行排序:


>>> k = np.array([[ 35, 48, 63],


... [ 60, 77, 96],


... [ 91, 112, 135]])


>>> flat=k.flatten()


>>> flat.sort()


>>> flat


array([ 35, 48, 60, 63, 77, 91, 96, 112, 135])


>>> flat[-2]


112


>>> flat[-3]


96



原作者:
62 5

np.partition的(最多O(n)运行时间)应该更快:


np.partition(k.flatten(), -2)[-2]



应该返回第二个最大元素。

原作者:
134 4

import numpy as np


a=np.array([[1,2,3],[4,5,6]])


a=a.reshape((a.shape[0])*(a.shape[1])) # n is the nth largest taken by us


print(a[np.argsort()[-n]])



原作者:
118 1

nums = [[ 35, 48, 63],


 [ 60, 77, 96],


 [ 91, 112, 135]]



highs = [max(lst) for lst in nums]


highs[nth]



原作者:
51 2

使用'unique'函数是一种非常干净的方法,但可能不是最快的方法:


k = array([[ 35, 48, 63],


 [ 60, 77, 96],


 [ 91, 112, 135]])


i = numpy.unique(k)[-2]



原作者:
...