对于单个阵列,有很多解决方案可以做到这一点,但是矩阵怎么样,例如:
>>> k
array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
Run Code Online (Sandbox Code Playgroud)
你可以使用k.max(),但当然这只返回最高值,135.如果我想要第二个或第三个怎么办?
ser*_*inc 25
至于说,np.partition应该快了(最多O(n)的运行时间):
np.partition(k.flatten(), -2)[-2]
Run Code Online (Sandbox Code Playgroud)
应该返回第二大元素.(partition保证编号元素处于适当位置,之前的所有元素都较小,后面的所有元素都较大).
rof*_*fls 12
您可以展平矩阵然后对其进行排序:
>>> 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
Run Code Online (Sandbox Code Playgroud)
使用“unique”函数是一种非常干净的方法,但可能不是最快的:
k = array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
i = numpy.unique(k)[-2]
Run Code Online (Sandbox Code Playgroud)
对于第二大的