Python与Numpy数组合并求助:将(30,192,192,1)数组合并为(30,192,192,2)
解决NumPy数组合并时的广播错误问题
你遇到的问题根源很清晰:a 和 b 的形状是(30,192,192,1),多了一个长度为1的最后一维,但你要赋值的input[:,:,:,0]是三维的(30,192,192),维度不匹配导致广播失败。下面给你几种实用的解决办法:
方法一:用np.concatenate直接合并(最推荐)
不用手动创建空数组再逐个赋值,直接用NumPy的合并函数一步到位:
import numpy as np input = np.concatenate([a, b], axis=3)
axis=3 指定在第四个维度(索引从0开始)上合并,执行后直接得到形状为(30,192,192,2)的目标数组,简洁又高效。
方法二:压缩维度后再赋值
如果坚持要保留手动创建数组的方式,可以先去掉a和b的最后一维(长度为1的维度不影响数据内容):
input = np.ndarray((a.shape[0], a.shape[1], a.shape[2], 2)) input[:, :, :, 0] = a[..., 0] # 用索引直接取最后一维的元素,形状变为(30,192,192) input[:, :, :, 1] = b[..., 0]
或者用np.squeeze()函数移除所有长度为1的维度,效果相同:
input[:, :, :, 0] = np.squeeze(a) input[:, :, :, 1] = np.squeeze(b)
方法三:用np.stack实现堆叠
np.stack也能完成这个需求,它会在指定维度上堆叠数组,这里我们选择最后一维:
input = np.stack([a[..., 0], b[..., 0]], axis=3)
这些方法都能完美解决维度不匹配的问题,其中第一种方法最简洁,建议优先使用。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

