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

如何高效移除Numpy数组中包含重复元素的行?

高效移除Numpy数组中含重复元素的行

针对Numpy数组,推荐用向量化操作替代逐行处理,这是提升速度的核心。以下两种方案都远快于pandas apply:

方案一:排序+差分检测(最优性能)

利用排序让重复元素相邻,再通过差分判断是否存在重复,全程无Python循环,适合大型数组:

import numpy as np

arr = np.array([[1,2,3], [1,2,2], [2,2,2]])
# 对每行元素排序,重复元素会被集中到一起
sorted_rows = np.sort(arr, axis=1)
# 计算每行相邻元素的差值,若差值为0则说明存在重复
has_dupe = np.any(np.diff(sorted_rows, axis=1) == 0, axis=1)
# 筛选出无重复的行
filtered_arr = arr[~has_dupe]

print(filtered_arr)  # 输出: [[1 2 3]]

原理:np.diff和np.any都是Numpy底层优化的向量化函数,执行效率远高于Python层面的逐行遍历。

方案二:统计每行唯一元素数量(更直观)

通过对比每行唯一元素的数量和行长度,判断是否存在重复:

import numpy as np

arr = np.array([[1,2,3], [1,2,2], [2,2,2]])
# 统计每行的唯一元素个数
unique_counts = np.array([len(np.unique(row)) for row in arr])
# 筛选唯一元素数等于行长度的行(无重复)
filtered_arr = arr[unique_counts == arr.shape[1]]

print(filtered_arr)  # 输出: [[1 2 3]]

说明:这里虽然用了列表推导式,但np.unique本身是优化过的C实现,速度依然比pandas apply快很多,适合中小规模数组或追求代码可读性的场景。

性能提示

对于10万行以上的大型数组,方案一的速度会比方案二快2-5倍,因为完全避免了Python层面的循环,充分利用了Numpy的向量化计算优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:49:54