如何基于指定条件合并两个维度相同的二维数组
实现方案
核心取值逻辑:遍历两个数组的每个对应位置,仅当数组b对应位置元素非0、且和数组a同位置元素不相等时,取b的值,其余场景全部取a的值。
原生Python实现(无需第三方依赖)
先定义你的输入数组:
a = [ [1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1], ] b = [ [0, 1, 1, 0], [0, 0, 0, 0], [2, 0, 0, 2], [0, 0, 0, 0], ]
常规循环写法(可读性高)
c = [] for row_a, row_b in zip(a, b): new_row = [] for val_a, val_b in zip(row_a, row_b): if val_b != 0 and val_b != val_a: new_row.append(val_b) else: new_row.append(val_a) c.append(new_row)
列表推导式写法(更简洁)
c = [ [val_b if val_b != 0 and val_b != val_a else val_a for val_a, val_b in zip(row_a, row_b)] for row_a, row_b in zip(a, b) ]
NumPy实现(适合大尺寸数组,性能更高)
import numpy as np a_np = np.array(a) b_np = np.array(b) # 生成符合替换条件的位置掩码 replace_mask = (b_np != 0) & (b_np != a_np) # 先复制a的所有值,再替换符合条件的位置 c_np = a_np.copy() c_np[replace_mask] = b_np[replace_mask] # 如果需要转回普通Python列表,执行下方代码即可 # c = c_np.tolist()
最终输出的c和你预期的结果完全一致:
[[1, 1, 1, 1], [1, 0, 0, 1], [2, 0, 0, 2], [1, 1, 1, 1]]
内容的提问来源于stack exchange,提问作者Ronnie Ron
相关产品推荐
相关产品推荐

