使用np.concatenate合并numpy数组报错,如何得到shape(2,32,32,3)数组?
解决Numpy数组合并成(2,32,32,3)的问题
嘿,我明白你遇到的问题了——直接用np.concatenate合并两个(32,32,3)的数组确实达不到你想要的(2,32,32,3)形状,这是因为concatenate是在已有轴上进行拼接,而你的原始数组只有3个轴,没法直接在第0轴(也就是你想要的新维度)上合并。
为什么会报错?
如果直接执行np.concatenate([A,B], axis=0),得到的会是(64,32,3)的数组(把两个数组在第0轴上首尾拼接);要是你错误指定了一个不存在的轴(比如axis=3),就会触发AxisError,因为原始数组只有0、1、2三个轴。
正确的解决方法
你需要先给每个数组添加一个新的维度(变成(1,32,32,3)),再进行合并;或者直接用更简便的np.stack函数一步到位。
方法1:先扩展维度再用concatenate
先通过np.expand_dims给每个数组增加一个第0轴,再拼接:
import numpy as np # 假设你的A和B已经是(32,32,3)的数组 A = np.random.rand(32, 32, 3) B = np.random.rand(32, 32, 3) # 扩展维度:从(32,32,3)变成(1,32,32,3) A_expanded = np.expand_dims(A, axis=0) B_expanded = np.expand_dims(B, axis=0) # 在第0轴上拼接 result = np.concatenate([A_expanded, B_expanded], axis=0) print(result.shape) # 输出: (2, 32, 32, 3)
方法2:直接用np.stack(更推荐)
np.stack会自动帮你添加新维度并完成合并,专门用于这种需要新增维度的拼接场景:
import numpy as np A = np.random.rand(32, 32, 3) B = np.random.rand(32, 32, 3) # 在第0轴上堆叠两个数组 result = np.stack([A, B], axis=0) print(result.shape) # 输出: (2, 32, 32, 3)
两种方法都能得到你想要的结果,np.stack更简洁,平时处理这种新增维度的合并我更常用它。
内容的提问来源于stack exchange,提问作者Manasi
相关产品推荐
相关产品推荐

