NumPy如何简便实现不同维度数组的拼接追加操作
NumPy三维数组无拆分拼接方案
已定义数组信息
- 基础三维数组
np3,形状为(2, 3, 5),创建代码:
import numpy as np np1 = np.array(range(2*3*5)) np3 = np1.reshape(2,3,5)
数组结构:
[[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[15 16 17 18 19] [20 21 22 23 24] [25 26 27 28 29]]]
- 待拼接数组
np_55,形状为(3, 1),创建代码:
np_55 = np.full((3,1),55)
数组结构:
[[55] [55]]
目标需求
拼接两个数组得到形状为(2, 3, 6)的目标数组,结构如下:
[[[ 0 1 2 3 4 55] [ 5 6 7 8 9 55] [10 11 12 13 14 55]] [[15 16 17 18 19 55] [20 21 22 23 24 55] [25 26 27 28 29 55]]]
原有硬编码方案需要手动拆分np3第0轴的两个子块,分别拼接后再合并,无法适配第0轴长度变化的场景,操作冗余。
最简实现代码
直接利用NumPy广播机制,无需拆分数组,一行代码即可完成拼接:
ANSWER = np.concatenate([np3, np_55[np.newaxis, :, :]], axis=2)
代码逻辑说明:np_55[np.newaxis, :, :] 会在原数组最外层新增一个长度为1的维度,将np_55的形状从(3,1)转换为(1,3,1)。拼接时NumPy会自动将这个形状为(1,3,1)的数组广播为(2,3,1),和np3的前两个维度长度完全匹配,沿最后一个维度(axis=2)拼接后直接得到目标形状的数组。
如果习惯用np.append接口,也可以写成更简洁的形式:
ANSWER = np.append(np3, np_55[None, :, :], axis=2)
其中None和np.newaxis的作用完全等价。该方案不需要循环、不需要手动索引子数组,只要待拼接数组和原数组除了拼接轴之外的维度满足广播规则,都可以直接用这个方法批量拼接。
内容的提问来源于stack exchange,提问作者LegasLee
相关产品推荐
相关产品推荐

