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

如何对二维数组执行滚动均值计算?

如何对二维数组执行滚动均值计算?

嘿,这个问题我太熟了!你要做的是二维数组的滑动窗口均值计算,还不想用循环,那用numpy的工具就能完美解决,效率超高。

先明确下你的需求:输入是形状为(6000, 3)的数组,要取连续3行的所有元素(也就是一个3×3的窗口),计算每个窗口的均值,最终得到长度为5998的一维数组——毕竟6000 - 3 + 1 = 5998,刚好是窗口能滑动的次数。

直接上代码,一步一步来:

  1. 先导入numpy,构造示例数组(你替换成自己的数组就行):
import numpy as np

# 构造一个和你需求形状一致的示例数组
arr = np.random.rand(6000, 3)
  1. 用滑动窗口工具生成所有3×3的窗口:
# 创建滑动窗口,窗口尺寸设置为(3,3),对应3行3列
windows = np.lib.stride_tricks.sliding_window_view(arr, window_shape=(3, 3))

这里生成的windows形状是(5998, 1, 3, 3),多出来的那个长度为1的维度是因为原数组列数刚好是3,列方向没法滑动,所以我们接下来处理掉它。

  1. 计算每个窗口的均值:
    你可以用两种方式实现,选哪种都可以:
  • 方式一:先把窗口展平成二维数组,再按行求均值
flattened_windows = windows.reshape(-1, 9)  # 每个窗口9个元素
mean_array = flattened_windows.mean(axis=1)
  • 方式二:直接对窗口的行、列维度求均值,再去掉多余维度
mean_array = windows.mean(axis=(2, 3)).squeeze()

最终得到的mean_array就是形状为(5998,)的数组,完全符合你的要求!

为啥不用循环?因为numpy的这些函数都是底层用C实现的,比Python写for循环快太多了,尤其是处理几千行的数组,效率差距特别明显,我之前处理时序数据时经常这么用,省心又高效。

备注:内容来源于stack exchange,提问作者Polly Gill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:23:02