You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在两个不同长度的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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:16:12