在两个不同长度的NumPy数组中查找不考虑顺序的重复行(Python)
找出NumPy数组中不考虑元素顺序的共同行
解决思路
核心是先统一每行元素的顺序,再通过集合操作找交集:
- 对两个数组的每一行分别排序,消除行内元素顺序的差异
- 将排序后的行转换为元组(NumPy数组元素不可直接哈希,元组可以)
- 利用集合的交集特性,找出共同的行,再对应回原数据
代码实现
import numpy as np # 定义两个输入数组 arr1 = np.array([['A', 'B'], ['C', 'D'], ['E', 'F']]) arr2 = np.array([['B', 'A'], ['C', 'E']]) # 对每行元素排序,得到标准化后的数组 sorted_arr1 = np.sort(arr1, axis=1) sorted_arr2 = np.sort(arr2, axis=1) # 转换为元组集合,方便求交集 set1 = set(tuple(row) for row in sorted_arr1) set2 = set(tuple(row) for row in sorted_arr2) # 找出共同的标准化行 common_sorted_rows = np.array(list(set1 & set2)) # 可选:从原数组中提取对应的原始行(如果需要保留原顺序的行) common_rows_arr1 = arr1[np.any(np.all(sorted_arr1 == common_sorted_rows[:, None], axis=2), axis=0)] common_rows_arr2 = arr2[np.any(np.all(sorted_arr2 == common_sorted_rows[:, None], axis=2), axis=0)] print("标准化后的共同行:") print(common_sorted_rows) print("\n原数组1中的对应行:") print(common_rows_arr1) print("\n原数组2中的对应行:") print(common_rows_arr2)
输出结果
运行后会得到:
标准化后的共同行: [['A' 'B']] 原数组1中的对应行: [['A' 'B']] 原数组2中的对应行: [['B' 'A']]
内容的提问来源于stack exchange,提问作者AN_
相关产品推荐
相关产品推荐

