2017-06-07 60 views
1

我目前有以下代碼創建一個n x n x n值列表。我使用下面的代碼來查找整個列表的最小值的索引,但我也有興趣找到第二個到最小值,第三個到最小值等等。以下是我現在使用的代碼:您可以忽略for循環,並且它們似乎都可以正常工作。如何在Python中的多維列表中找到最小值,從小到大等等的索引?

ind = np.unravel_index(C.argmin(), C.shape) 

C是包含數據的列表。有沒有一種簡單的方法來修改這一行代碼來找到我正在尋找的東西?

+0

排序清單? –

回答

0

你可以使用np.argsort代替argmin

>>> import numpy as np 
>>> arr = np.random.random((20, 20, 20)) 
>>> nsmallest = 3 
>>> np.unravel_index(np.argsort(arr, axis=None)[:nsmallest], arr.shape) 
(array([ 3, 16, 12], dtype=int64), 
array([ 2, 15, 15], dtype=int64), 
array([16, 11, 19], dtype=int64)) 

但是,這是換位所以第一列包含最小項指數:(3, 2, 16),第二個索引中的第二到最小:(16, 15, 11) ...

或者乾脆使用循環在argsort結果:

>>> argsorted = np.argsort(arr, axis=None) 
>>> for i in range(nsmallest): 
...  print(np.unravel_index(argsorted[i], arr.shape)) 
(3, 2, 16) 
(16, 15, 11) 
(12, 15, 19) 
相關問題