如何从长度可变的原始数组计算得到固定长度的均值数组
数组定长平均处理通用解决方案
存在可落地的通用实现方案,核心逻辑为先按原始数组长度和目标长度划分采样窗口,再逐窗口执行自定义平均规则,完全可以覆盖你给出的所有示例场景,具体实现逻辑如下:
核心实现步骤
- 第一步:基础参数校验
先获取原始数组长度L,如果L等于目标输出长度n,直接返回原数组即可,对应示例中的c数组场景。 - 第二步:窗口划分规则计算
- 固定窗口大小默认取2(也可根据需求自定义调整)
- 计算窗口滑动步长:
step = (L - 窗口大小) / (n - 1) - 遍历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
相关产品推荐
相关产品推荐

