有很多解決方案,爲單個陣列做到這一點的,但對於一個矩陣,如:最快的方式
>>> k
array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
您可以使用k.max()
,但當然這隻返回最高值,135
。如果我想要第二或第三呢?
有很多解決方案,爲單個陣列做到這一點的,但對於一個矩陣,如:最快的方式
>>> k
array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
您可以使用k.max()
,但當然這隻返回最高值,135
。如果我想要第二或第三呢?
可以flatten矩陣,然後對其進行排序:
>>> 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
由於said,np.partition
應該更快(最多O(n)的運行時間):
np.partition(k.flatten(), -2)[-2]
應該返回第二最大的元素。 (partition
保證編號元素在位,前面的所有元素都較小,後面的所有元素都較大)。
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]])
感謝您的貢獻。如果你解釋你的想法,你的答案可能會更有用。 –
看看這個答案:http://stackoverflow.com/questions/26603747/get-the-indices-of-n-highest-values-in-an-ndarray – NJM