我试图找出每行中最小值的索引,我正在使用下面的代码。
#code
import numpy as np
C = np.array([[1,2,4],[2,2,5],[4,3,3]])
ind = np.where(C == C.min(axis=1).reshape(len(C),1))
ind
#output
(array([0, 1, 1, 2, 2], dtype=int64), array([0, 0, 1, 1, 2], dtype=int64))
但问题是它返回每行中所有最小值的索引。但我只希望第一次出现最小值。喜欢
(array([0, 1, 2], dtype=int64), array([0, 0, 1], dtype=int64))
答案 0 :(得分:2)
如果您要使用与最小值的比较,我们需要使用np.min
并将keepdims
设置为True
的维度保留给我们一个布尔数组/掩码。要选择第一次出现,我们可以在掩码的每一行使用argmax
,从而得到我们想要的输出。
因此,获取相应列索引的实现将是 -
(C==C.min(1, keepdims=True)).argmax(1)
逐步运行示例 -
In [114]: C # Input array
Out[114]:
array([[1, 2, 4],
[2, 2, 5],
[4, 3, 3]])
In [115]: C==C.min(1, keepdims=1) # boolean array of min values
Out[115]:
array([[ True, False, False],
[ True, True, False],
[False, True, True]], dtype=bool)
In [116]: (C==C.min(1, keepdims=True)).argmax(1) # argmax to get first occurances
Out[116]: array([0, 0, 1])
行索引的第一个输出只是一个范围数组 -
np.arange(C.shape[0])
要获得首次出现最小值的相同列索引,直接的方法是使用np.argmin
-
C.argmin(axis=1)