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

如何将1000个32×32的Numpy数组堆叠为250个64×64数组?

最优实现:将(1000,32,32)数组拼接为(250,64,64)

要实现每4个32×32数组按2×2网格拼接成64×64数组,最优方案是利用numpy的**形状重塑(reshape)和轴变换(transpose)**操作,全程使用向量化运算,避免循环,性能拉满。

核心思路

把原数组按每4个一组拆分,将每组4个32×32块重组为2行2列的网格,再合并成64×64的单个数组。

两种高效实现方法

方法一:分步拼接(直观易懂)

通过concatenate分步完成横向、纵向拼接,逻辑清晰:

import numpy as np

# 假设输入为形状(1000,32,32)的numpy数组
original = np.random.rand(1000, 32, 32)

# 1. 按每4个一组拆分
grouped = original.reshape(250, 4, 32, 32)

# 2. 每组内横向拼接第0、1个元素,得到顶部32×64块
top_row = np.concatenate([grouped[:, 0], grouped[:, 1]], axis=2)
# 3. 横向拼接第2、3个元素,得到底部32×64块
bottom_row = np.concatenate([grouped[:, 2], grouped[:, 3]], axis=2)

# 4. 纵向拼接上下两行,得到最终(250,64,64)数组
result = np.concatenate([top_row, bottom_row], axis=1)

方法二:形状变换组合(性能最优)

利用reshape和transpose直接调整内存布局,无需额外数据复制,速度更快:

import numpy as np

original = np.random.rand(1000, 32, 32)

# 一步完成重组:reshape分组 → transpose调整轴顺序 → reshape合并维度
result = original.reshape(250, 2, 2, 32, 32).transpose(0, 1, 3, 2, 4).reshape(250, 64, 64)

方法二原理拆解

  1. reshape(250,2,2,32,32):将1000个样本拆分为250组,每组是2行×2列的32×32小块,形状变为(250, 行, 列, 高度, 宽度)
  2. transpose(0,1,3,2,4):调整轴的顺序,把列轴和高度轴交换,使每组结构变为(250, 行, 高度, 列, 宽度),此时行内的列和宽度可以自然合并
  3. reshape(250,64,64):将2行×32高度合并为64高度,2列×32宽度合并为64宽度,直接得到目标形状

验证结果一致性

两种方法输出完全一致:

print(np.array_equal(result_method1, result_method2))  # 输出True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:55:36