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

Python二维数组按行每10个数据求移动平均如何保留151列

问题背景

现有形状为(1000, 151)的numpy数组aN,需求为沿行方向每10行计算一次平均值,输出结果需保留原数组的151列。
原有实现代码运行后仅得到长度为100的一维列表,不符合预期,原代码如下:

arr = aN[:]
window_size = 10
i = 0
moving_averages = []

while i < len(arr) - window_size + 1:
    window_average = round(np.sum(arr[i:i+window_size]) / window_size, 2)      
    moving_averages.append(window_average)
    i += 10
错误原因

原代码的核心问题是调用np.sum()时未指定计算轴:

  • 未指定axis参数时,np.sum()会对截取到的10*151二维窗口内所有元素做全局求和,最终输出单个标量值
  • 逐窗口累计标量值后,最终自然得到长度为100的一维列表,丢失了原数组的列维度
实现方案

方案1:numpy向量化实现(推荐,性能最优)

当总行数可被窗口大小整除时(当前场景1000行/窗口10行刚好满足),直接通过reshape拆分维度后沿指定轴求平均,无需写循环:

import numpy as np

window_size = 10
# 将行维度拆分为 [窗口数量, 单窗口行数, 原列数],沿窗口内的行轴求列平均
result = aN.reshape(-1, window_size, aN.shape[1]).mean(axis=1).round(2)

运行后result的形状为(100, 151),完全保留原数组151列的结构。

方案2:修正原有循环逻辑

如果要保留循环写法,只需要在求和时指定axis=0,即沿行轴对每一列单独求和计算平均值即可:

arr = aN[:]
window_size = 10
i = 0
moving_averages = []

while i < len(arr) - window_size + 1:
    # 指定axis=0,沿行方向计算每列的窗口平均值
    window_average = np.round(np.sum(arr[i:i+window_size], axis=0) / window_size, 2)      
    moving_averages.append(window_average)
    i += window_size

# 将列表转为numpy数组,最终形状为(100, 151)
moving_averages = np.array(moving_averages)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:48:15