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

如何从长度可变的原始数组计算得到固定长度的均值数组

数组定长平均处理通用解决方案

存在可落地的通用实现方案,核心逻辑为先按原始数组长度和目标长度划分采样窗口,再逐窗口执行自定义平均规则,完全可以覆盖你给出的所有示例场景,具体实现逻辑如下:

核心实现步骤

  • 第一步:基础参数校验
    先获取原始数组长度L,如果L等于目标输出长度n,直接返回原数组即可,对应示例中的c数组场景。
  • 第二步:窗口划分规则计算
    1. 固定窗口大小默认取2(也可根据需求自定义调整)
    2. 计算窗口滑动步长:step = (L - 窗口大小) / (n - 1)
    3. 遍历0到n-1的位置,每个位置对应的窗口起始索引为round(i * step),窗口范围为[起始索引, 起始索引 + 窗口大小),超出数组边界时截断到数组末尾即可。
  • 第三步:自定义平均规则适配
    需求不限制平均规则的场景下,只需要替换窗口内的数值计算逻辑即可,默认用普通算术平均,也可替换为加权平均、截断平均、中位数计算等任意规则,无需调整前面的窗口划分逻辑。

代码实现示例(Python)

def resize_array_with_average(arr, target_n, window_size=2, average_func=lambda x: sum(x)/len(x)):
    l = len(arr)
    if l == target_n:
        return arr
    res = []
    # 计算滑动步长
    step = (l - window_size) / (target_n - 1)
    for i in range(target_n):
        start = int(round(i * step))
        end = min(start + window_size, l)
        window = arr[start:end]
        res.append(average_func(window))
    return res

# 测试示例
a = [1,2,3,4,5,6]
b = [7,8,9,10]
c = [11,12,13]
n = 3
print(resize_array_with_average(a, n)) # 输出 [1.5, 3.5, 5.5]
print(resize_array_with_average(b, n)) # 输出 [7.5, 8.5, 9.5]
print(resize_array_with_average(c, n)) # 输出 [11, 12, 13]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:24:02