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

Python:通过每隔n个元素删值将数组长度调整为5000

等间隔下采样统一数组长度实现方案

问题说明

需要对长度动态变化的多个数组,通过均匀间隔移除元素的方式将长度调整到5000,允许最终采样结果先落在5000-5050区间,再截断到精确5000长度。
原有实现用整数步长抽取的方式存在固定误差:以长度26975的数组为例,步长取5时抽取结果长度为5395,步长取6时结果长度仅为4495,无法落入目标区间。

实现思路

不要计算「每隔多少个元素删除1个」,反过来直接计算需要保留的元素索引即可:

  • 预抽取5020个元素(留20个截断余量,避免最终长度不足)
  • 用等间隔索引生成方法,从原数组中均匀取出对应数量的元素,不存在步长取整带来的累积误差
  • 最后截断到精确的5000长度即可

可直接复用的代码

import numpy as np

def uniform_downsample(arr, target_len=5000, pre_sample_margin=20):
    origin_len = len(arr)
    # 原数组长度不足目标值时直接补位/截断返回
    if origin_len <= target_len + pre_sample_margin:
        output = arr.copy()
        output.resize((target_len, arr.shape[1]), refcheck=False)
        return output
    # 生成均匀分布的索引,一次性取出预采样数量的元素
    sample_indices = np.linspace(0, origin_len - 1, 
                                 num=target_len + pre_sample_margin, 
                                 dtype=int)
    sampled = arr[sample_indices]
    # 截断到精确目标长度
    sampled.resize((target_len, arr.shape[1]), refcheck=False)
    return sampled

# 测试用例:长度26975的测试数组
test_arr = np.random.rand(26975, 3)
result = uniform_downsample(test_arr)
print(f"输出数组长度:{len(result)}")  # 固定输出5000

效果说明

  • 对任意长度大于5020的输入数组,该方法都能返回长度恰好为5000的结果
  • 抽取的元素在原数组中均匀分布,不会出现局部过密或过疏的问题
  • 不需要手动计算删除比例、间隔值,自动适配所有动态长度的输入数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:48:23