NumPy ndarray合并数组
在 NumPy 中,合并数组也是最常见的操作之一,下表列举了常见的用于数组或向量合并的方法。
几点说明:
下面选择一些常用函数进行说明。
append() 也可以合并多维数组:
函数 | 描述 |
---|---|
np. append() | 内存占用大 |
np.concatenate() | 没有内存问题 |
np. stack() | 沿着新的轴加入一系列数组 |
np.hstack() | 堆栈数组垂直顺序(行) |
np.vstack() | 堆栈数组垂直顺序(列) |
np.dstack() | 堆栈数组按顺序深入(沿第3维) |
np.vsplit() | 将数组分解成垂直的多个子数组的列表 |
几点说明:
- append()、concatenate() 以及 stack() 都有一个 axis 参数,用于控制数组的合并方式是按行还是按列。
- 对于 append() 和 concatenate(),待合并的数组必须有相同的行数或列数(满足一个即可)。
- stack()、hstack()、dstack() 要求待合并的数组必须具有相同的形状(shape)。
下面选择一些常用函数进行说明。
append()
append() 函数可以合并一维数组:import numpy as np a =np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.append(a, b) print(c) # [1 2 3 4 5 6]
append() 也可以合并多维数组:
import numpy as np a =np.arange(4).reshape(2, 2) b = np.arange(4).reshape(2, 2) # 按行合并 c = np.append(a, b, axis=0) print('按行合并后的结果') print(c) print('合并后数据维度', c.shape) # 按列合并 d = np.append(a, b, axis=1) print('按列合并后的结果') print(d) print('合并后数据维度', d.shape)输出结果:
按行合并后的结果
[[0 1]
[2 3]
[0 1]
[2 3]]
合并后数据维度 (4, 2)
按列合并后的结果
[[0 1 0 1]
[2 3 2 3]]
合并后数据维度 (2, 4)
concatenate()
沿指定轴连接数组或矩阵:import numpy as np a =np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) c = np.concatenate((a, b), axis=0) print(c) d = np.concatenate((a, b.T), axis=1) print(d)输出结果:
[[1 2]
[3 4]
[5 6]]
[[1 2 5]
[3 4 6]]
stack()
沿指定轴堆叠数组或矩阵:import numpy as np a =np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) print(np.stack((a, b), axis=0))输出结果:
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]