【问题标题】:Replacing minimum element in a numpy array subject to a condition根据条件替换numpy数组中的最小元素
【发布时间】:2015-10-27 14:43:28
【问题描述】:

我需要替换一个 numpy 数组的元素,以验证一个条件的另一个 numpy 数组的最小值。请参阅以下最小示例:

arr = np.array([0, 1, 2, 3, 4])
label = np.array([0, 0, 1, 1, 2])
cond = (label == 1)
label[cond][np.argmin(arr[cond])] = 3

我希望这个标签现在是

 array([0,  0,  3,  1, 2])

相反,我得到了

 array([0,  0,  1,  1, 2])

这是numpy arrays are not updated with double slicing 已知事实的结果。

无论如何,我无法弄清楚如何以简单的方式重写上面的代码。有什么提示吗?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您正在使用该索引链接触发NumPy's advanced indexing,因此分配不会通过。为了解决这个问题,一种方法是存储与掩码对应的索引,然后使用索引。这是实现 -

    idx = np.where(cond)[0]
    label[idx[arr[idx].argmin()]] = 3
    

    示例运行 -

    In [51]: arr = np.array([5, 4, 5, 8, 9])
        ...: label = np.array([0, 0, 1, 1, 2])
        ...: cond = (label == 1)
        ...: 
    
    In [52]: idx = np.where(cond)[0]
        ...: label[idx[arr[idx].argmin()]] = 3
        ...: 
    
    In [53]: idx
    Out[53]: array([2, 3])
    
    In [54]: label
    Out[54]: array([0, 0, 3, 1, 2])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      相关资源
      最近更新 更多