根据条件替换numpy数组中的最小元素

2024-04-19 23:08:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要替换一个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的结果。你知道吗

无论如何,我不知道如何用一种简单的方法重写上面的代码。有什么提示吗?你知道吗


Tags: numpy元素示例np标签数组条件array
1条回答
网友
1楼 · 发布于 2024-04-19 23:08:39

您正在用索引的链接触发^{},因此赋值不会通过。要解决这个问题,一种方法是存储与掩码对应的索引,然后使用索引。以下是实施方案-

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

相关问题 更多 >