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

如何提取两个2D NumPy数组中arr1独有的行元素(保留原顺序)

问题场景

现有两个二维NumPy数组:

import numpy as np
arr1 = np.array([[1,4], [3,4], [5,4]])
arr2 = np.array([[1,3], [3,4], [4,5], [5,6]])

需要筛选出arr1中沿第0轴(按行)不存在于arr2的元素,且必须保留元素在arr1中的原有排列顺序,预期输出为:

np.array([[1,4], [5,4]])
实现方法

方法1:元组集合比对(写法直观,兼容性强)

将数组每一行转为可哈希的元组存入集合,按arr1原顺序逐行判断成员关系,天然保留原始顺序,中小数据量下使用足够方便:

# 预处理arr2的行存入集合,将成员查询复杂度降到O(1)
arr2_row_set = set(tuple(row) for row in arr2)
# 按原顺序筛选arr1中不在集合内的行,转回数组即可
res = np.array([row for row in arr1 if tuple(row) not in arr2_row_set])

运行后得到的结果和预期完全一致。

方法2:纯NumPy向量化实现(大数据量下性能更优)

数组规模较大时,用NumPy广播机制做批量比对,避免Python层循环开销,运行效率更高:

# 逐元素比对arr1的每一行和arr2的所有行,判断行是否完全匹配
row_match_matrix = (arr1[:, np.newaxis] == arr2).all(axis=2)
# 筛选出在arr2中没有任何匹配的行
res = arr1[~row_match_matrix.any(axis=1)]

注意:如果数组包含浮点数,不要直接用==判断相等,需要替换为np.isclose()做近似相等判断,避免浮点精度误差导致结果错误。

内容的提问来源于stack exchange,提问作者pnina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:57:23