如何在python中的numpy数组中找到所有最小元素的索引?

时间:2018-07-19 07:40:08

标签: python numpy

假设我有一个numpy数组

a = np.array([0,2,3,4,5,1,9,0,0,7,9,0,0,0]).reshape(7,2)

我想找出第二列中出现最小元素(此处为0)的所有时间的索引。使用argmin,我可以找出第一次出现0时的索引。如何在Python中执行此操作?

2 个答案:

答案 0 :(得分:0)

调整数组的形状后,它看起来像这样:

array([[0, 2],
       [3, 4],
       [5, 1],
       [9, 0],
       [0, 7],
       [9, 0],
       [0, 0]])

您可以使用np.where获得具有相同值的所有元素。在您的情况下,以下方法将起作用:

np.where(a.T[-1] == a.argmin())
# This would give you (array([3, 5, 6]),)

这里发生的是您在数组上创建了转置视图。这意味着您可以轻松访问列。此处的术语“视图”表示a数组本身并未为此更改。这使您拥有:

a.T

array([[0, 3, 5, 9, 0, 9, 0],
       [2, 4, 1, 0, 7, 0, 0]])

您可以通过使用索引a选择最后一行(即-1的最后一列)。现在您有了数组

array([2, 4, 1, 0, 7, 0, 0])

可以在其上调用np.where(condititon),从而为您提供条件为真的所有索引。您的情况是

a.T[-1] == a.argmin()

为您提供转置数组的选定行中所有与np.argmin(a)具有相同值的值,正如您所说,在您的情况下为0

答案 1 :(得分:0)

array[0]上使用np.flatnonzero是最直观的方法:

a[:, 1]==np.min(a)