如何将shape为(250,250,3)的Numpy数组转换回(250,250)格式
Numpy三通道数组还原为单通道数组方案
需求可行性判断
该需求是否可实现,完全取决于你当初把shape为(250,250)的单通道数组n扩展为shape为(250,250,3)的三通道数组w时采用的逻辑:
- 若扩展逻辑为将
n的数值在最后一个维度重复复制3次(比如使用np.repeat、np.stack拼接三个相同数组等方式),可100%还原出原shape的数组,数值和原始n完全一致 - 若扩展时三个通道的数值是独立计算生成的,没有复用原
n的完整信息,该转换不可逆,无法还原出原始的n数组
操作失败原因说明
你使用reshape相关操作失败是正常现象:reshape的本质是调整数组维度的视图,要求变换前后的数组总元素数量完全匹配。
- 三通道数组
w总元素数:250 * 250 * 3 = 187500 - 目标单通道数组总元素数:
250 * 250 = 62500
两者元素总数不匹配,reshape不可能完成该转换,你需要使用维度切片而非维度重构操作。
可行还原方案(可复制场景)
如果当初是复制生成三通道,直接取最后一个维度的任意一个切片即可:
import numpy as np # 模拟你当初的扩展操作 n = np.random.rand(250, 250) w = np.repeat(n[..., np.newaxis], 3, axis=-1) # 得到shape(250,250,3)的数组 # 还原为(250,250)的操作 n_restored = w[..., 0] print(n_restored.shape) # 输出 (250, 250) # 验证和原数组完全相等 print(np.array_equal(n, n_restored)) # 输出 True
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

