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

如何将3D NumPy数组重塑为2D数组并利用轴2数据升采样

将3D NumPy数组重塑为指定2D数组的方法

给定形状为(2,2,4)的3D NumPy数组:

import numpy as np
array_3d = np.array([
    [[1, 2, 3, 4], [5, 6, 7, 8]],
    [[9, 10, 11, 12], [13, 14, 15, 16]]
])

需要将其转换为形状(4,4)的2D数组:

# 目标结果
array([[ 1,  2,  5,  6],
       [ 3,  4,  7,  8],
       [ 9, 10, 13, 14],
       [11, 12, 15, 16]])

方法一:reshape + transpose 组合操作

通过拆分维度、调整轴顺序再合并的方式实现:

# 拆分轴2为两个长度为2的维度,得到(2,2,2,2)形状的数组
temp = array_3d.reshape(2, 2, 2, 2)
# 调整轴顺序,将拆分后的维度与轴1交换
temp_transposed = temp.transpose(0, 2, 1, 3)
# 合并最后两个维度,得到目标形状
reshaped_array = temp_transposed.reshape(4, 4)

简化为单行代码:

reshaped_array = array_3d.reshape(2, 2, 2, 2).transpose(0, 2, 1, 3).reshape(4, 4)

方法二:split + vstack 组合操作

先拆分轴2的元素,再分别重塑后垂直拼接:

# 沿轴2拆分为前2个元素和后2个元素,得到两个(2,2,2)形状的数组
upper_part, lower_part = np.split(array_3d, 2, axis=2)
# 分别重塑为(2,4)的2D数组
upper_2d = upper_part.reshape(2, 4)
lower_2d = lower_part.reshape(2, 4)
# 垂直拼接得到目标数组
reshaped_array = np.vstack([upper_2d, lower_2d])

为什么你的原有方法不符合预期?

你之前的代码array_3d.swapaxes(1, 2).reshape(-1, array_3d.shape[1])交换轴后直接reshape,会将轴2的每个元素单独拆分为一行,破坏了轴0内的元素分组关系,因此得到的是8行2列的数组,而非目标的4行4列结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:40