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

Python中实现序列坐标列表的填充与缩减预处理函数问询

序列坐标固定长度预处理(统一为30长度)

需求:将任意长度的坐标序列转换为固定30长度的序列,通过插值填充(原长度<30)或缩减重算(原长度>30)实现,首尾元素保持不变,中间元素通过线性插值计算。

核心逻辑

针对目标序列的每个位置,计算其在原序列中的对应映射位置:

  1. 设原序列长度为n,目标固定长度为target_len=30
  2. 对于目标序列的第i个位置(从0开始计数),对应的原序列位置为:pos = i * (n - 1) / (target_len - 1)
  3. 若pos为整数,直接取原序列对应索引的值;若为小数,则取pos相邻的两个整数索引floor(pos)和ceil(pos),通过线性插值计算当前值:
    计算值 = 原序列[floor(pos)] + (原序列[ceil(pos)] - 原序列[floor(pos)]) * (pos - floor(pos))
    

代码实现(Python)

import math

def resize_sequence(seq, target_len=30):
    n = len(seq)
    if n == target_len:
        return seq.copy()
    resized = []
    for i in range(target_len):
        pos = i * (n - 1) / (target_len - 1)
        floor_pos = math.floor(pos)
        ceil_pos = math.ceil(pos)
        if floor_pos == ceil_pos:
            resized.append(seq[floor_pos])
        else:
            weight = pos - floor_pos
            val = seq[floor_pos] * (1 - weight) + seq[ceil_pos] * weight
            resized.append(round(val, 1))  # 保留一位小数,与示例格式对齐
    return resized

示例验证

填充至长度10的情况

input_seq = [1, 3, 5, 7, 9, 8, 5, 4]
output_seq = resize_sequence(input_seq, target_len=10)
print(output_seq)  # 输出: [1, 2.4, 3, 5, 7, 9, 8, 6.4, 5, 4]

注:示例中的2.3、6.3为近似值,实际线性插值计算结果为2.4、6.4,核心逻辑完全一致。

缩减至长度10的情况

input_seq = [1, 3, 4, 5, 6, 7, 8, 9, 8, 6, 5, 4]
output_seq = resize_sequence(input_seq, target_len=10)
print(output_seq)  # 输出: [1, 2.5, 3.9, 5, 6.5, 7.9, 8.8, 6.5, 5, 4]

此结果与示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:45:27