Python中根据另一数组的条件修改指定数组元素的实现问题
解决方案
你可以通过两种高效的NumPy向量化操作实现需求,且不会修改原数组,结果存入新变量:
方法一:布尔索引+副本修改
先创建原数组的副本,再通过布尔掩码定位需要修改的位置并更新:
import numpy as np y1 = [1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1] y2 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1] y1_a = np.array(y1) y2_a = np.array(y2) # 创建y2_a的副本作为初始新数组 y_modified = y2_a.copy() # 生成布尔掩码:筛选y1_a为1且y2_a为0的位置 mask = (y1_a == 1) & (y2_a == 0) # 更新符合条件的位置为1 y_modified[mask] = 1 # 输出结果 print("原y2_a数组:") print(y2_a) print("修改后的数组:") print(y_modified)
方法二:np.where一步生成
利用np.where函数直接根据条件生成新数组,代码更简洁:
import numpy as np y1 = [1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1] y2 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1] y1_a = np.array(y1) y2_a = np.array(y2) # 条件满足时取1,否则保留y2_a原值 y_modified = np.where((y1_a == 1) & (y2_a == 0), 1, y2_a) # 输出结果 print("原y2_a数组:") print(y2_a) print("修改后的数组:") print(y_modified)
结果说明
两种方法得到的修改后数组均为:[1 0 0 0 1 0 1 0 0 0 0 1 1 1],仅更新了y1_a为1且y2_a为0的位置,其余位置保持原y2_a的值。
内容的提问来源于stack exchange,提问作者shiva
相关产品推荐
相关产品推荐

