Python中如何将(64,64)形状数组重构为(64,64,3)形状?
如何将(64,64)的NumPy数组扩展为(64,64,3)形状?
嗨,这里有几种实用的方法帮你实现需求,都是基于NumPy的(毕竟处理多维数组它最顺手):
方法1:使用np.repeat()(最直接的重复操作)
先给原数组添加一个新的单维度,然后在这个新维度上重复3次:
import numpy as np # 示例数组,形状(64,64) arr = np.random.rand(64, 64) # 添加新维度并重复 result = np.repeat(arr[:, :, np.newaxis], repeats=3, axis=2) print(result.shape) # 输出: (64, 64, 3)
解释:arr[:, :, np.newaxis]把原数组从(64,64)变成(64,64,1),np.repeat在第2个轴(索引从0开始)重复3次,刚好把单维度扩展为3通道。
方法2:np.expand_dims() + np.tile()(平铺扩展)
先扩展维度,再用tile平铺这个单维度:
# 扩展维度到(64,64,1) arr_expanded = np.expand_dims(arr, axis=2) # 在第2轴平铺3次 result = np.tile(arr_expanded, reps=(1, 1, 3)) print(result.shape) # 输出: (64, 64, 3)
tile的reps=(1,1,3)表示:第0轴、第1轴保持原长度不变,第2轴重复3次,和方法1效果一致。
方法3:使用np.stack()(直观堆叠)
把同一个数组连续堆叠3次在新维度上,非常直观:
result = np.stack([arr, arr, arr], axis=2) print(result.shape) # 输出: (64, 64, 3)
这种方法可读性很强,一眼就能看出来是把三个相同的数组在第2轴合并成3通道。
方法4:利用广播机制(简洁写法)
借助NumPy的广播特性,用一个长度为3的数组触发维度扩展:
result = arr[..., np.newaxis] * np.ones(3, dtype=arr.dtype)
这里arr[..., np.newaxis]同样是扩展到(64,64,1),然后和形状为(3,)的ones数组相乘时,广播会自动把单维度扩展到3,最终得到(64,64,3)的数组。
这些方法都能实现你的需求,效率上差别不大,选你觉得最易读的就行~
内容的提问来源于stack exchange,提问作者Skullgreymon
相关产品推荐
相关产品推荐

