假设我有一个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中执行此操作?
答案 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)