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

如何在Python中从二维数组移除与另一数组重复的行?

从NumPy数组中提取与另一个数组重复的行

你之前尝试用np.delete(a,b,0)是找错了方法——np.delete的第二个参数需要的是要删除的行的索引值,不是行元素本身。要得到数组a中与b重复的行(也就是你要的k = [[3,4],[7,8]]),可以用以下几种实用方法:

方法一:结构化数组 + np.isin

NumPy的np.isin默认不支持直接比较二维数组的行,我们可以把二维数组转换成一维的结构化数组,实现行级别的匹配:

import numpy as np

a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = np.array([[3,4],[7,8]])

# 将二维数组转为可逐行比较的结构化数组
a_struct = a.view([('', a.dtype)] * a.shape[1])
b_struct = b.view([('', b.dtype)] * b.shape[1])

# 生成布尔掩码,筛选a中存在于b的行
mask = np.isin(a_struct, b_struct)
k = a[mask]

print(k)
# 输出结果:
# [[3 4]
#  [7 8]]

方法二:用np.intersect1d求行交集

同样借助结构化数组,直接求两个数组的行交集:

import numpy as np

a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = np.array([[3,4],[7,8]])

a_struct = a.view([('', a.dtype)] * a.shape[1])
b_struct = b.view([('', b.dtype)] * b.shape[1])

# 获取行级别的交集
intersect_rows = np.intersect1d(a_struct, b_struct)
# 转回原二维数组格式
k = intersect_rows.view(a.dtype).reshape(-1, a.shape[1])

print(k)

方法三:循环匹配(适合小规模数组)

如果数组行数不多,直接用列表推导式循环判断每行是否在b中:

import numpy as np

a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = np.array([[3,4],[7,8]])

k = np.array([row for row in a if any((row == b_row).all() for b_row in b)])

print(k)

补充:为什么你的np.delete用法不对?

np.delete的正确用法是传入要删除的索引位置,比如你要删除a的第0、2行,应该写np.delete(a, [0,2], 0),而不是直接传入b的行元素,这也是你之前尝试失败的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:30:10