如何用Numpy array masking找出两数组差异行的索引?
解决方案:找出Numpy数组中与另一数组不同的行索引及内容
首先构造示例数组:
import numpy as np # 第一个数组 arr1 = np.array([[1, 2], [3, 4], [5, 6], [6, 5]]) # 第二个数组 arr2 = np.array([[1, 2], [3, 4]])
核心实现代码
利用np.isin结合行维度的全匹配判断,再通过掩码筛选目标行:
# 生成掩码:标记arr1中不在arr2里的行 mask = ~np.isin(arr1, arr2).all(axis=1) # 获取差异行的索引 diff_indices = np.where(mask)[0] # 获取差异行的内容 diff_rows = arr1[mask]
代码解释
np.isin(arr1, arr2):对arr1的每个元素,判断是否存在于arr2中,返回与arr1同形状的布尔数组。.all(axis=1):沿着行的维度(axis=1)判断整行所有元素都满足条件,即整行完全存在于arr2中,返回一维布尔数组。~:对布尔数组取反,得到标记不在arr2中的行的掩码。np.where(mask)[0]:提取掩码中True对应的索引值,也就是差异行的位置。arr1[mask]:直接通过掩码筛选出arr1中的差异行。
运行结果
执行上述代码后:
diff_indices的结果为array([2, 3])diff_rows的结果为array([[5, 6], [6, 5]]),完全符合需求。
内容的提问来源于stack exchange,提问作者Dinc Kirikci
相关产品推荐
相关产品推荐

