如何在python中查找numpy数组中所有最小元素的索引?
假设我有一个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]
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不会自动创建视图吗?(转置也是一种观点)。观点很好。你完全正确。谢谢你指出这一点,谢谢!这很有帮助,不客气。请考虑通过点击上/下投票箭头上的刻度标记来接受问题的答案。这标志着你的问题已经解决了。