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

Python抽样时如何排除与已选列表同索引的图像?

解决方案:从列表抽样并排除指定标识的图像

核心思路

先从negTest中提取需要排除的人脸唯一标识,再过滤list2排除包含这些标识的元素,最后对过滤后的列表随机抽样得到posTest。

具体实现步骤

  1. 提取需排除的人脸标识
    从negTest的每个元素中解析出对应的人脸唯一标识(比如AF01、CFD-WF-011),根据文件名格式做针对性解析:

    • 对于AF/AM开头的文件名,取下划线分割后的第一部分
    • 对于CFD开头的文件名,取短横线分割后的前三部分拼接结果
    • 其他格式可根据实际情况调整解析逻辑
  2. 过滤list2
    遍历list2,剔除所有包含已提取标识的元素,得到可抽样的候选列表。

  3. 随机抽样生成posTest
    使用random.sample对过滤后的列表进行抽样,抽样数量可与negTest保持一致。

完整代码示例

import random

def get_face_id(item):
    # 拆分出文件路径(去掉后面的参数部分)
    file_path = item.split(',')[0]
    # 提取文件名
    filename = file_path.split('/')[-1]
    
    if filename.startswith('AF') or filename.startswith('AM'):
        # 处理AF/AM开头的标识
        return filename.split('_')[0]
    elif filename.startswith('CFD'):
        # 处理CFD开头的标识,提取CFD-WF-xxx部分
        parts = filename.split('-')
        return '-'.join(parts[:3])
    else:
        # 处理其他格式的标识,比如004_o_m_a_a.png取004
        return filename.split('_')[0]

# 示例negTest
negTest = ["Stimuli/Faces/resized_neg_faces/AF01_AC.png,0.55,-1.5", 
           "Stimuli/Faces/resized_neg_faces/AF06_AC.png,0.55,-1.5"]

# 1. 获取需要排除的标识
excluded_ids = [get_face_id(item) for item in negTest]

# 2. 过滤list2
filtered_list2 = [item for item in list2 if not any(face_id in item for face_id in excluded_ids)]

# 3. 随机抽样生成posTest(这里抽2个,和negTest数量一致)
posTest = random.sample(filtered_list2, 2)

print(posTest)

说明

  • 如果你的文件名格式有变化,只需修改get_face_id函数的解析逻辑即可适配
  • 确保过滤后的filtered_list2长度大于等于抽样数量,避免random.sample抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:55:27