如何返回两个2D数组的差异且保持原有维度和元素位置
你可以通过布尔掩码+全零初始化的方式实现,核心逻辑是保留原数组维度的前提下,仅对差异位置赋值:
核心实现步骤
- 先通过
arr1 != arr2生成和原数组维度完全一致的布尔掩码,差异位置为True,相同位置为False - 初始化一个和
arr2结构完全一致的全0数组 - 将掩码为
True的位置替换为arr2对应位置的元素即可
完整可运行代码
import numpy as np # 示例输入 arr1 = np.array([ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]) arr2 = np.array([ [0, 1, 2], [3, 5, 5], [6, 7, 8] ]) # 生成差异数组 mask = arr1 != arr2 diff = np.zeros_like(arr2) diff[mask] = arr2[mask] print(diff)
运行输出
[[0 0 0] [0 5 0] [0 0 0]]
原代码无法保留维度的原因是np.nonzero返回的是差异位置的索引序列,直接索引取值会将结果拍平为一维数组,丢失原维度信息。
内容的提问来源于stack exchange,提问作者nemi
相关产品推荐
相关产品推荐

