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

如何快速删除numpy数组中包含任意全局重复值的行

实现方案

你描述的需求和给出的预期结果对应优先保留先出现的行、最终选中行的所有元素全局唯一的逻辑,以下是对应的实现方法:

步骤说明

  1. 维护一个已出现元素的集合,用于记录已经被保留行包含的元素
  2. 逐行遍历原数组,检查当前行所有元素是否都不在已出现集合中
  3. 符合条件的行保留,并将该行所有元素加入已出现集合,不符合条件的行直接过滤

代码实现

import numpy as np

# 构造示例数组
A = np.array([[1, 4, 3],
              [1, 2, 5],
              [6, 7, 8],
              [9, 10, 2],
              [11, 3, 12]])

seen = set()
keep_mask = []
for row in A:
    if all(val not in seen for val in row):
        keep_mask.append(True)
        seen.update(row)
    else:
        keep_mask.append(False)

# 得到最终结果
result = A[keep_mask]
print(result)

运行后输出和你给出的预期完全一致:

[[ 1  4  3]
 [ 6  7  8]
 [ 9 10  2]]

需求差异说明

如果你实际需求是删除所有包含全局出现过至少2次的元素的行,可以用下面的向量化实现,效率更高,但输出结果和你给出的预期不同:

# 统计全局所有元素的出现次数
vals, counts = np.unique(A, return_counts=True)
# 筛选出所有重复的元素
dup_vals = vals[counts >= 2]
# 只要行里有重复元素就过滤
keep_mask = ~np.isin(A, dup_vals).any(axis=1)
result = A[keep_mask]

这个方法的输出为 [[6 7 8]]。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:12:02