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

如何使用Numpy计算二维数组按指定块大小划分的各分块平均值

Numpy二维数组按指定尺寸分块求均值实现

已知条件

给定如下Numpy数组和分块参数:

import numpy as np

temp_array = np.array(
  [[33.5, 35.3, 33.6, 33.6, 33.5, 33.9, 32.3, 33.2, 53.8, 54.6, 53.4, 54.2],
   [33.1, 34.2, 34.1, 34.3, 34.7, 31.3, 32.3, 33.4, 57.5, 55. , 53.5, 56.1],
   [35.3, 35.4, 35.6, 32.6, 33.2, 34.3, 32.8, 33.1, 54.7, 55.4, 54.6, 55.1],
   [34.2, 36.1, 33.5, 32.4, 32.1, 33.5, 34.5, 35. , 53.8, 56.9, 54.5, 54.7],
   [33.4, 33.8, 36.2, 33. , 35. , 34.2, 33.8, 33.8, 55.7, 55.2, 56. , 54.5],
   [34.3, 35.9, 34.4, 34.2, 53.5, 54.2, 55.7, 54. , 56.3, 54.4, 55.5, 53.8],
   [34.7, 35.4, 34.7, 33.1, 53.6, 54.5, 54.4, 55.5, 54.7, 55.4, 55.1, 55.6],
   [33.3, 34.3, 33.6, 33.1, 55.4, 55.7, 55.4, 55.4, 55.8, 55. , 55.3, 54.1],
   [33.7, 33.5, 37. , 34.9, 57.6, 54.2, 54.9, 54.6, 56. , 55.7, 55.1, 55.9],
   [34. , 35.1, 33.6, 34.5, 56.2, 55.3, 55.2, 54. , 54.1, 54.5, 54.4, 56. ]])

cell_shape = (5,4)

需求是按cell_shape尺寸将数组划分为连续不重叠的子区块,计算每个子区块所有元素的平均值。

实现代码

利用Numpy维度变换和轴均值计算即可高效实现,无需循环遍历:

# 计算分块数量
row_block_num = temp_array.shape[0] // cell_shape[0]
col_block_num = temp_array.shape[1] // cell_shape[1]

# 维度重塑后调整轴顺序,对每个子块的最后两个维度求平均
block_avg = temp_array.reshape(row_block_num, cell_shape[0], col_block_num, cell_shape[1])\
                      .transpose(0,2,1,3)\
                      .mean(axis=(-2,-1))

输出结果

运行后得到6个分块的平均值为:

array([[34.035, 33.44 , 55.02 ],
       [34.28 , 54.94 , 55.11 ]])

如果需要展开为一维列表,可直接调用block_avg.flatten()得到:[34.035, 33.44, 55.02, 34.28, 54.94, 55.11]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:11