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

如何在python中查找numpy数组中所有最小元素的索引?,python,numpy,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中实现这一点?在重新调整阵列形状后,看起来如下所示: array([[0, 2], [3, 4], [5, 1], [9, 0], [0, 7], [9, 0]

假设我有一个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中实现这一点?

在重新调整阵列形状后,看起来如下所示:

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]])
通过使用索引
-1
,从中选择最后一行(即
a
的最后一列)。现在你有了数组

array([2, 4, 1, 0, 7, 0, 0])
您可以在其上调用
np.where(condition)
,这将为您提供条件为真的所有索引。你的情况是

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

这将为您提供转置数组中选定行中与
np值相同的所有条目。argmin(a)
,正如您所说,在您的情况下,它是
0

使用
a[:,1]==np.min(a)
上的
np.flatnonzero
是最直接的方法:

In [3]: idxs = np.flatnonzero(a[:, 1]==np.min(a))

In [4]: idxs
Out[4]: array([3, 5, 6])

欢迎来到StackOverflow。您目前只是希望我们为您解决问题。请自己尝试一下,如果您没有任何线索,请在线搜索并学习基本知识,然后向我们展示您所取得的成就。如果您在这一过程中遇到困难,请随时回来寻求帮助。可能重复,您为什么需要显式的
.view()
?numpy不会自动创建视图吗?(转置也是一种观点)。观点很好。你完全正确。谢谢你指出这一点,谢谢!这很有帮助,不客气。请考虑通过点击上/下投票箭头上的刻度标记来接受问题的答案。这标志着你的问题已经解决了。