如何将形状为(1,3,480,640)的NumPy图像数组转为(640,480,3)形状
NumPy图像数组维度调整方法
你持有的图像NumPy数组形状为(1, 3, 480, 640),维度顺序为(a, z, y, x),要转换为(x, y, z)顺序、形状(640, 480, 3)的数组,可按以下步骤操作:
- 第一步:移除长度为1的冗余
a维度
调用np.squeeze()指定压除第0轴(即a维度),避免无差别压除其他可能长度为1的有效维度,处理后数组形状变为(3, 480, 640),维度顺序为(z, y, x)。 - 第二步:调整轴顺序匹配目标维度
调用transpose()方法重排轴顺序,将当前(z, y, x)顺序调整为(x, y, z),对应轴索引为(2, 1, 0)。
代码示例
import numpy as np # 原数组,形状(1, 3, 480, 640),维度顺序(a,z,y,x) origin_img = np.random.rand(1, 3, 480, 640) # 分两步处理 squeezed_img = np.squeeze(origin_img, axis=0) # 输出形状(3,480,640) result_img = squeezed_img.transpose((2, 1, 0)) # 输出形状(640,480,3) # 验证输出形状 print(result_img.shape)
如果需要精简代码,也可以通过一次轴重排+压除冗余维度一步完成:
result_img = origin_img.transpose((3, 2, 1, 0)).squeeze(axis=-1)
注意:调用
squeeze()时务必传入axis参数指定要移除的维度,若直接调用无参数版本,当数组中其他维度(比如单通道z维度、特殊尺寸的y/x维度)长度恰好为1时,会被误删除导致维度错误。
内容的提问来源于stack exchange,提问作者jack gell
相关产品推荐
相关产品推荐

