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

如何从numpy数组A中删除所有存在于数组B中的相同行

NumPy按行过滤数组实现方案

核心需求是从更大的数组A中,剔除所有在数组B中出现过的行,生成仅包含A独有行的数组C。

以下是两种可直接使用的实现方式:

方法1:广播逐行对比(适配中小规模数组)

实现逻辑简单直观,代码量少:

import numpy as np

# 示例数组构造
A = np.array([[1,0,0], [2,0,0], [3,0,0], [4,0,0], [5,0,0]])
B = np.array([[2,0,0], [5,0,0]])

# 生成过滤掩码:A中某行不在B中则为True
mask = ~(A[:, np.newaxis] == B).all(axis=2).any(axis=1)
C = A[mask]

# 输出验证:[[1 0 0] [3 0 0] [4 0 0]]
print(C)

方法2:结构化数组映射(适配大规模数组,性能更高)

当A、B行数达到数千甚至上万时,广播对比会占用过高内存,用该方案时间、空间复杂度更低:

# 将整行转换为单个结构化void元素,可直接做包含判断
A_row = A.view(np.dtype((np.void, A.dtype.itemsize * A.shape[1])))
B_row = B.view(np.dtype((np.void, B.dtype.itemsize * B.shape[1])))

# 调用in1d快速判断行是否存在
mask = ~np.in1d(A_row, B_row)
C = A[mask]

注意:使用该方法前需要确保A和B的dtype、每行元素数量完全一致,否则会出现判断错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:04