如何正确相加掩码冲突的两个二维数组?
解决方案
你可以用numpy的布尔索引和向量化运算直接实现需求,完全不需要MaskedArray或者循环,这里提供两种简洁的写法:
方法一:基于数组复制与索引更新
先以raw为基础结果,再单独把graw中mask以外的区域值加进去:
# 复制raw作为结果的初始值 result = raw.copy() # 对mask之外的区域,累加graw对应位置的值 result[~mask] += graw[~mask]
方法二:直接数组运算生成结果
通过布尔数组转float的特性,把graw在mask内的部分清零,再和raw相加:
# 利用布尔数组转float后,True=1、False=0的特性,直接运算 result = raw + graw * (~mask.astype(float))
两种方法的效果完全一致:mask内部保留raw的1,mask外部则是raw的0加上graw的高斯值,完美实现你想要的raw + graw[~mask]效果,而且都是numpy原生的向量化操作,效率远高于循环。
内容的提问来源于stack exchange,提问作者condosz
相关产品推荐
相关产品推荐

