Python中如何将多个NumPy数组合并为形状(1,7,2)的单个数组
NumPy拼接子数组得到形状(1,7,2)数组的实现方案
需求梳理
- 操作环境:Python + NumPy
- 输入:
B1[0,0]到B1[0,6]共7个长度为2的一维NumPy数组 - 输出要求:按原有顺序拼接为单个数组
B,形状必须为(1,7,2),结构与给定的期望输出完全一致
现有代码补全
你给出的初始化代码缺少B1的容器定义,直接运行会触发名称错误,补全后可运行的初始化代码如下:
import numpy as np # 初始化存储子数组的容器 B1 = np.empty((1, 7), dtype=object) B1[0,0] = np.array([0,1]) B1[0,1] = np.array([1,3]) B1[0,2] = np.array([2,5]) B1[0,3] = np.array([3,4]) B1[0,4] = np.array([4,7]) B1[0,5] = np.array([5,6]) B1[0,6] = np.array([6,7])
实现代码
两种常用实现方式都可以得到符合要求的结果:
方式1:列表转换+维度扩展(写法最简洁)
直接取出B1第一维的所有子数组转为普通列表,再转成NumPy数组后在最外层新增一个维度即可:
B = np.array(B1[0].tolist())[np.newaxis, :, :]
方式2:堆叠后调整维度
用np.stack沿第0轴堆叠所有子数组成(7,2)形状的二维数组,再在外层新增维度:
B = np.stack(B1[0], axis=0)[np.newaxis, ...]
结果验证
执行上述代码后打印B和B.shape,可以得到完全匹配预期的输出:
>>> print(B) [[[0 1] [1 3] [2 5] [3 4] [4 7] [5 6] [6 7]]] >>> print(B.shape) (1, 7, 2)
避坑提示
- 不要直接用
np.concatenate拼接所有子数组,该操作会把7个长度为2的数组合并为一个长度14的一维数组,无法得到目标三维结构 - 如果不需要保留
B1的object数组结构,更高效的写法是初始化时直接按(1,7,2)的形状赋值,省去后续拼接步骤
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

