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

基于Numpy数组值(同索引)筛选列表条目优化方案咨询

优化方案:更简洁高效的分组实现

你的需求其实可以通过更简洁的方式实现,同时还能避免原代码里的潜在问题(比如原代码计算number_of_validResults的方式其实是错误的,np.unique(resultData>=0)得到的是布尔值的唯一值,长度永远是2,和你示例里的13完全不符)。下面提供两种优化思路,按需选择:

方案一:纯Python简洁写法(易读性优先)

利用zip配对数据,结合collections.defaultdict自动分组,代码更直观,不需要手动维护索引:

from collections import defaultdict

# 第一步:筛选有效数据(排除resultData中<0的条目)并配对
valid_pairs = [(res_val, data_item) for res_val, data_item in zip(resultData, baseDataList) if res_val >= 0]

# 第二步:按resultData的有效值分组
result_dict = defaultdict(list)
for res_val, data_item in valid_pairs:
    result_dict[res_val].append(data_item)

# 如果需要和原输出一样的列表格式(按结果值排序)
resultList = [result_dict[key] for key in sorted(result_dict.keys())]

优点:

  • 不需要手动维护idx变量,彻底避免索引错误
  • 自动处理所有唯一结果值,不需要提前计算数量
  • 代码逻辑清晰,可读性强,冗余变量少

方案二:Numpy向量化写法(性能优先,适合大数据量)

如果你的数据量很大,用Numpy的向量化操作会比纯Python循环高效得多:

import numpy as np

# 生成有效数据的掩码
valid_mask = resultData >= 0

# 筛选出有效的结果值和对应的base数据
valid_results = resultData[valid_mask]
valid_base = np.array(baseDataList)[valid_mask]  # 若baseDataList是元组列表,转成numpy数组不影响后续操作

# 获取排序后的唯一结果值
unique_res = np.sort(np.unique(valid_results))

# 分组生成结果列表
resultList = [valid_base[valid_results == res].tolist() for res in unique_res]

优点:

  • 利用Numpy的向量化运算,比Python循环快数倍(数据量越大优势越明显)
  • 代码同样简洁,避免手动索引操作

原代码的问题说明

你原来的代码里number_of_validResults = len(np.unique(resultData>=0))是错误的:resultData>=0返回的是布尔数组,np.unique后只会得到[False, True],长度永远是2,这和你示例里的13个唯一值完全不符,会导致resultList的长度错误,后续分组也会出问题。上面的优化方案都避免了这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:50:56