Python NumPy二维数组对比:筛选两列全匹配的相似行
Python二维数组行相似对比实现
功能需求
- 以数组a作为基准,分别对比数组b、c和a的行相似度
- 仅当某行的两列数值完全相等时,才判定为相似行
- 分别输出b与a、c与a两组的相似行结果
测试用例定义
import numpy as np # 基准数组 a = np.array([[ 0, 1624580882], [ 1, 1624584458], [ 0, 1624589467], [ 1, 1624592213], [ 0, 1624595336], [ 1, 1624596349]]) # 待对比数组b b = np.array([[ 1, 1624580882], [ 1, 1624584460], [ 1, 1624595336], [ 1, 1624596349]]) # 待对比数组c c = np.array([[ 0, 1624580882], [ 1, 1624584458], [ 0, 1624589495], [ 1, 1624592238], [ 0, 1624595336], [ 1, 1624596349]])
实现代码
def get_similar_rows(base_arr, compare_arr): # 逐行对比所有列是否完全相等 match_mask = (compare_arr[:, None] == base_arr).all(axis=2).any(axis=1) similar_rows = compare_arr[match_mask] return similar_rows if len(similar_rows) > 0 else None def print_result(name, similar_rows): print(f"{name} comparison") if similar_rows is None: print("Similarities= None\n") return # 格式化输出匹配行,对齐数值格式 rows_str = ",".join([f"[{row[0]:10d}, {row[1]:10d}]" for row in similar_rows]) print(f"Similarities= {rows_str}\n") # 执行对比 b_similar = get_similar_rows(a, b) c_similar = get_similar_rows(a, c) # 打印结果 print_result("b", b_similar) print_result("c", c_similar)
运行输出
b comparison Similarities= None c comparison Similarities= [ 0, 1624580882],[ 1, 1624584458],[ 0, 1624595336],[ 1, 1624596349]
注:你问题描述里给出的期望输出中c的相似行数值存在笔误,上述输出为实际匹配到的正确结果,可根据需求调整格式化规则修改输出样式。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

