Numpy 数组高阶操作函数

数组高阶操作函数

Numpy 提供了一系列针对数组操作的高阶函数。其中一类比较常见的是数组的合并。

1. 数组的合并与堆叠

1.1 numpy.concatenate 函数

numpy.concatenate 函数用于沿指定轴连接两个或多个相同形状的数组。该函数的原型如下:

numpy.concatenate((a1, a2, ...), axis=)

参数说明如下:

参数说明
a1,a2 …相同类型的数组序列
axis连接数组的轴的方向,默认值为0

案例

创建大小为 2×2 的二维数组 a 和 b:

a = np.array([[,],[,]])b = np.array([[,],[,]])

查看数组:

print(数组a:)print(a)print(数组b:)print(b)

打印结果为:

数组a:[[ ]
 [ ]]数组b:[[ ]
 [ ]]

利用 concatenate 函数进行垂直方向的合并:

np.concatenate((a, b), axis=)out:array([[, ],   [, ],   [, ],   [, ]])

上述语句实现了:沿着 axis=0(对于二维数组,显示为垂直)方向合并,合并的结果在垂直方向的维数扩充到 4,整个结果的数组大小为 4×2。

利用 concatenate 函数进行水平方向的合并:

np.concatenate((a, b), axis=)out:array([[, , , ],   [, , , ]])

上述语句实现了:沿着 axis=1(对于二维数组,显示为水平)方向合并,合并的结果在水平方向的维数扩充到 4,整个结果的数组大小为 1×4。

通过观察上述过程,可以发现:concatenate 可以实现数组沿着某一轴向进行合并,合并后数组的维度保持不变。

案例

numpy.concatenate 函数可以一次性拼接多个数组:

np.concatenate((a, b, a, b), axis=)out:array([[, , , , , , , ],   [, , , , , , , ]])

concatenate 函数可以接收不定长的数组序列,并按照指定的轴进行合并。

1.2 numpy.stack函数

numpy.stack 函数沿指定轴连接数组序列,该函数的原型如下:

numpy.stack((a1, a2, ...), axis=)

参数说明如下:

参数说明
a1,a2 …相同类型的数组序列
axis连接数组的轴的方向,默认值为0

案例

仍然指定拼接方向为 axis=0 方向,观察与 concatenate 函数的区别:

np.stack((a, b), axis=)

该语句实现了把数据 a 和 b 在 axis=0(最外层)增加一层,进行堆叠:

array([[[, ],[, ]],   [[, ],[, ]]])

堆叠的结果为三维数组,其中 axis=0 方向(最外层)的组成元素分别对应为 a 和 b。

案例

指定拼接方向为 axis=1 方向,观察与 concatenate 函数的区别:

np.stack((a, b), axis=)

该语句实现了把数据 a 和 b 在 axis=1 增加一层,再进行堆叠:

array([[[, ],[, ]],   [[, ],[, ]]])

具体堆叠过程可以按照拆解为如下步骤:

  1. 数组 a 和  b分别由 2×2 扩充为 2×1×2,在 axis=1 的维度实现了扩充;

  2. 在扩充的轴上进行堆叠,即在 axis=1 的轴上进行堆叠。

1.3 numpy.hstack 函数

对于二维数组,在水平方向进行堆叠,但是数组的维度保持不变。函数效果等价于numpy.concatenate((a1,  a2, …), axis=1)。

案例

利用 hstack 函数合并数组 a 和 b:

np.hstack((a,b))out:array([[, , , ],   [, , , ]])

上述效果与 np.concatenate((a, b), axis=1) 完全一致。

1.4 numpy.vstack函数

对于二维数组,在垂直方向进行堆叠,但是数组的维度保持不变。函数效果等价于numpy.concatenate((a1,  a2, …), axis=0)。

案例

利用 hstack 函数合并数组 a 和 b:

np.vstack((a,b))out:array([[, ],   [, ],   [, ],   [, ]])

上述效果与np.concatenate((a, b), axis=0)完全一致。

2. 小结

本节讲述了数组合并与堆叠的几种常用方法,其中concatenate函数与stack函数需要在使用中指定具体的计算方向,而vstack和hstack则默认了合并方向,使用过程中注意区分。