如何用Python将3D数组重塑为指定2D数组并还原?
3D数组转指定2D数组并还原的解决方案
原3D数组形状为(3, 3, 3),对应3张3×3的高度图;目标2D数组需要将每张图对应位置的数值归为一行,形状为(9, 3)。单纯使用np.reshape无法实现,因为需要调整元素的轴顺序,结合轴变换+重塑即可完成需求。
代码实现
1. 导入依赖并创建原数组
import numpy as np # 原3D数组:shape=(3,3,3),维度对应(图数, 行, 列) arr_3d = np.array([ [[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[0, 1, 2], [3, 4, 5], [6, 7, 8]] ])
2. 转换为目标2D数组
# 先转置轴顺序为(行, 列, 图数),再重塑为(9,3) arr_2d = arr_3d.transpose(1, 2, 0).reshape(-1, 3)
transpose(1,2,0):将原数组的轴从(图,行,列)调整为(行,列,图),让每个(行,列)位置的跨图数值集中在第三个轴上reshape(-1,3):自动计算第一维度为3×3=9,得到每行对应一个位置的跨图数值,最终输出符合需求的2D数组
3. 还原回原3D数组
# 先重塑回(3,3,3),再转置轴顺序为(图数, 行, 列) restored_3d = arr_2d.reshape(3, 3, 3).transpose(2, 0, 1)
验证还原正确性:np.array_equal(restored_3d, arr_3d)会返回True
高度图插值场景适配
转换为2D数组后,每一行对应同一个高度图位置在不同帧的数值,可直接对每行执行插值操作(比如用np.interp实现线性插值),得到插值后的2D数组后,再按上述还原步骤转换为3D数组,即可得到平滑过渡的高度图序列。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

