(1)比如我们希望将两个二维数组在一个新的维度上拼接成一个三维数组,我们可以先利用 newaxis 构建出这个维度,然后再使用 concatenate,vstack, hstack 等方法。
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
a_ = a[..., np.newaxis]
b_ = b[..., np.newaxis]
c = np.concatenate((a_, b_), 2)
c的数组为:
array([[[1, 5],
[2, 6]],
[[3, 7],
[4, 8]]])
注意: concatenate vstack hstack 等方法并不能修改数组本身的维度。
(2)假设我们想要在第一维之前插入新维度,可以更简单地写成:
c = np.array([a, b])
c的结果为:
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
(3)当然如果觉得 newaxis 麻烦,可以先用上面的方法增加新维度,然后再将其从第一维移至想要的位置:
np.rollaxis(c,0,3)
array([[[1, 5],
[2, 6]],
[[3, 7],
[4, 8]]])
注意: np.rollaxis 这个函数设计得极其糟糕,它的第二个参数为需要调整位置的轴,第三个参数为目标位置。如果当前位置等于目标位置,函数不作任何操作,否则当前轴将被调整至紧邻目标位置的前一位置处,np.rollaxis(x,n,n+1) 都是没有实际效果的写法。