如何在Python的多维列表中找到最小值,第二个到最小值等的索引?

时间:2017-06-07 00:21:34

标签: python python-3.x

我目前有以下代码创建一个n x n x n值列表。我使用以下代码来查找整个列表的最小值的索引,但我也有兴趣找到第二个到最小值,第三个到最小值等等。这是我现在使用的代码:您可以忽略for循环,例如它们似乎都正常工作。

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

C是包含数据的列表。有没有一种简单的方法来修改这行代码来找到我要找的东西?

1 个答案:

答案 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)