如何在Numpy中对第一列匹配目标列表的行,将其第二列元素加1?
你之前的写法无法得到预期结果的核心原因是:np.add 搭配 where 参数时不会修改原数组,只会返回单次匹配对应的新数组,且map遍历过程中不会累积每次的修改结果,自然达不到批量更新的效果。
可以用np.isin生成匹配掩码实现需求,全程向量化操作无需循环,效率很高:
import numpy as np # 原始数组和输入列表 my_list = np.array( [[1,100], [2,120], [3,150], [4,190], [5,98],]) input_list = [1,4,5] # 生成布尔掩码:第一列元素在输入列表里的行标记为True match_mask = np.isin(my_list[:, 0], input_list) # 选中匹配行的第二列统一加1 # 如果不想修改原数组,先执行 my_output = my_list.copy() 再修改my_output即可 my_list[match_mask, 1] += 1
执行后my_list就是你需要的输出:
array([[ 1, 101], [ 2, 120], [ 3, 150], [ 4, 191], [ 5, 99]])
内容的提问来源于stack exchange,提问作者ARK1375
相关产品推荐
相关产品推荐

