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

如何高效按给定列表值过滤二维np array且保留原元素位置

最优实现方案

直接使用Numpy内置向量化方法实现,全程无Python级循环,大数组场景下性能远超列表推导式实现,同时天然保留元素原有位置顺序:

import numpy as np

# 示例数据
b = np.array([['a', 'b', 'c', 'd'], ['b', 'a', 'c', 'd'], ['c', 'b', 'a', 'd'], ['a', 'd', 'c', 'b']])
values_to_stay_in_b = ['a', 'b']

# 生成布尔掩码,标记所有需要保留的元素
mask = np.isin(b, values_to_stay_in_b)
# 过滤后按原数组行数调整维度,得到最终结果
result = b[mask].reshape(b.shape[0], -1)

运行后得到的result和你期望的输出完全一致:

array([['a', 'b'],
       ['b', 'a'],
       ['b', 'a'],
       ['a', 'b']], dtype='<U1')

特殊场景兼容

如果你的实际场景中每行符合保留条件的元素数量不固定,无法直接reshape为规整二维数组,可以用以下方式得到每行的过滤结果列表:

row_keep_count = mask.sum(axis=1)
result = np.split(b[mask], np.cumsum(row_keep_count))[:-1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:45:05