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

如何无循环将偶数维度Numpy数组维度减半

无循环实现Numpy偶数维度数组的块平均降维

需求说明

要把偶数维度的Numpy数组(比如4×4转2×2、500×500转250×250),按每2×2块取平均值的方式压缩维度,要求不用循环,且能适配所有偶数维度的数组。

问题分析

你手动选取四个块计算的写法不仅冗余,还容易出错(比如你给出的实际输出明显是没正确执行除法导致的),而且没法直接适配更大的数组。

解决方案

用Numpy的reshape和mean组合就能搞定,完全不需要循环,代码通用所有偶数维度:

import numpy as np

# 输入示例数组
x_4 = np.array([[1, 2, 4, 5], [3, 4, 6, 8], [5, 3, 1, -1], [2, 3, 5, 0]])

# 核心逻辑
block_size = 2  # 500×500数组的话,这里改成250就行
# 先把数组拆成四维分块结构,再对每个块内部的元素求平均
result = x_4.reshape(
    x_4.shape[0] // block_size, block_size,
    x_4.shape[1] // block_size, block_size
).mean(axis=(1, 3))

print(result)
# 输出符合预期:
# [[2.5  5.75]
#  [3.25 1.25]]

原理解释

  • reshape操作把原数组拆成了(块行数, 块内行数, 块列数, 块内列数)的四维结构,比如4×4数组会变成(2,2,2,2),对应2行2列共4个2×2的块。
  • mean(axis=(1,3))是对每个块内部的行、列维度求平均,直接得到每个块的平均值,最终输出维度就是原维度的一半。
  • 不管是4×4还是500×500,只要把block_size设为原维度的一半,代码就能直接用,完全不用改其他地方。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:06:16