在NumPy中将二维数组追加到一维空数组,期望得到三维数组
Hey,我明白你想要的效果了!咱们来看看问题出在哪,以及怎么解决~
你用np.append(a, b)得到一维数组的核心原因是:np.append()默认会把所有输入数组扁平化处理,当一维空数组和二维数组维度不匹配时,它会自动把两者都拉平成一维再拼接,自然就得不到你想要的三维结构了。
要实现把二维数组作为一个元素存入三维数组的效果,关键是让两个数组维度匹配,并且指定拼接的轴,避免扁平化。下面给你两种实用的方法:
方法1:初始化空三维数组,指定轴追加
先把空数组初始化为三维结构(比如形状是(0, 2, 2),表示0个2×2的二维数组元素),然后把要追加的二维数组包装成三维数组,再用axis=0指定沿着第一个维度拼接:
import numpy as np # 初始化空的三维数组,匹配后续要追加的二维数组形状 a = np.empty((0, 2, 2), dtype=int) b = np.array([[1, 2], [3, 4]]) # 把b包装成三维数组(形状从(2,2)变为(1,2,2)),再追加 result = np.append(a, [b], axis=0) print(result) # 输出: # [[[1 2] # [3 4]]]
后续如果还要追加其他二维数组,比如c = np.array([[5,6],[7,8]]),直接用同样的方式即可:
result = np.append(result, [c], axis=0)
方法2:直接将二维数组转为三维(适合无需先积累空数组的场景)
如果你只是想把单个二维数组包装成三维结构,不需要先维护一个空数组,可以用np.expand_dims()直接给数组增加一个维度:
b = np.array([[1, 2], [3, 4]]) result = np.expand_dims(b, axis=0) print(result) # 输出和上面一致:[[[1 2] [3 4]]]
小提醒
- 不管用哪种方法,都要保证追加的数组和目标数组的形状匹配(除了拼接轴的维度),否则会报错。
- 千万别忘了指定
axis参数,不然np.append()又会自动扁平化数组啦!
内容的提问来源于stack exchange,提问作者Mukundan314
相关产品推荐
相关产品推荐

