【问题标题】:select first occurance of minimum index from numpy array从 numpy 数组中选择第一次出现的最小索引
【发布时间】:2017-09-14 20:32:09
【问题描述】:

我正在尝试找出每行中最小值的索引,我正在使用以下代码。

#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))

【问题讨论】:

  • 使用 argmin : C.argmin(1)np.arange(C.shape[0]) 作为行索引。
  • Divakar 谢谢,请将其添加到答案中,我会将其标记为正确答案。

标签: python python-2.7 python-3.x numpy scipy


【解决方案1】:

如果你想对最小值进行比较,我们需要使用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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2014-04-21
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2018-05-21
    • 2018-06-30
    相关资源
    最近更新 更多