如何将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
相关产品推荐
相关产品推荐

