如何将经转置重塑后的2D NumPy数组还原为原始3D数组形状
如何将经转置重塑后的2D NumPy数组还原为原始3D数组形状
嘿,我来帮你搞定这个问题!你已经成功把3D NumPy数组转成了目标2D数组,现在想转回去对吧?其实只需要把你之前的转换步骤倒过来执行就行,我给你一步步拆解清楚:
首先,先回顾下你之前从3D到2D的转换逻辑:
你是先对原始数组做了transpose(1,2,0)(重新排列轴的顺序),再用reshape(-1,3)把它摊平成2D数组。那还原的时候,就要先把2D数组reshape回转置后的3D形状,再把轴的顺序转置回原始的排列。
具体的代码实现
我把整个流程(包括原始数组定义、转换、还原)都写出来,你可以直接运行验证:
import numpy as np # 原始的3D数组 a = np.array([[[11,12,13], [14,15,16]], [[21,22,23], [24,25,26]], [[31,32,33], [34,35,36]]]) # 你已经完成的:从3D转成目标2D数组 step1 = a.transpose(1, 2, 0).reshape(-1, 3) # 重点:还原回原始3D形状的步骤 # 第一步:把2D数组reshape回转置后的3D形状(也就是(2,3,3),对应你之前transpose后的形状) temp_3d = step1.reshape(2, 3, 3) # 第二步:把轴的顺序转置回原始排列,这里用transpose(2,0,1)就能还原 original_shape_back = temp_3d.transpose(2, 0, 1) # 验证一下:看看还原后的数组和原始数组是不是完全一样 print(np.array_equal(original_shape_back, a)) # 会输出True,说明还原成功!
为什么要这么做?
我给你解释下关键的转置逻辑:
你之前用transpose(1,2,0)把原始数组的轴顺序从(0,1,2)改成了(1,2,0),对应的形状从(3,2,3)变成了(2,3,3)。现在要逆操作,就得把轴的顺序再转回来——transpose(2,0,1)其实就是把转置后的轴映射反转:原来的轴0对应原始的轴1,轴1对应原始的轴2,轴2对应原始的轴0,反转后就是把现在的轴2放回原始的轴0位置,轴0放回原始的轴1位置,轴1放回原始的轴2位置,这样就完美还原了原始的轴顺序和形状。
如果你嫌步骤太繁琐,还可以把两步合并成一行代码:
original_shape_back = step1.reshape(2,3,3).transpose(2,0,1)
内容来源于stack exchange
相关产品推荐
相关产品推荐

