如何合并两个NumPy数组 重叠坐标优先取1实现数组叠加
NumPy数组合并实现方案
你需要的优先保留值1、其余位置取对应非1值的合并逻辑,可以直接通过NumPy的条件索引实现,逻辑非常清晰:
- 先标记出两个数组中所有值为1的坐标位置,这些位置最终结果统一取1
- 以b数组为基底拷贝生成初始结果,再把所有标记为1的位置赋值为1即可
对应实现代码如下:
import numpy as np # 原有输入数组定义 a = np.array([[[1, 0], [1, 1]], [[1, 0], [0, 0]], [[0, 0], [1, 0]]]) b = np.array([[[0, 2], [0, 0]], [[0, 0], [0, 2]], [[0, 2], [0, 2]]]) # 核心合并逻辑 mask = (a == 1) | (b == 1) # 标记所有存在值1的位置 result = b.copy() result[mask] = 1 # 打印验证结果 print(result)
运行后输出和你预期完全一致:
[[[1 2] [1 1]] [[1 0] [0 2]] [[0 2] [1 2]]]
如果需要精简写法,也可以直接用np.where一行完成核心计算,运行效果完全相同:
result = np.where((a == 1) | (b == 1), 1, b)
逻辑说明:逐位置判断如果当前坐标在a或b中存在值1,就返回1,否则返回b对应位置的值,完全匹配你给出的合并规则。如果后续a数组存在0、1之外的其他有效值,只需要调整第三个参数的取值逻辑即可,比如改成
np.where((a==1)|(b==1), 1, np.where(a!=0, a, b))就能实现「优先取1,其次取a的非0值,最后取b的值」的扩展规则。
内容的提问来源于stack exchange,提问作者user745587
相关产品推荐
相关产品推荐

