合并数组
NumPy 的 Stack 相关方法能将两个以上的数组,合并为单一个数组,这篇教学将会介绍 NumPy 里合并数组的做法。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
合并数组项目的方法
NumPy 有下列几种合并数组项目的方法:
| 方法 | 参数 | 说明 |
|---|---|---|
| numpy.concatenate() | arrays | 将多个“同形状”的数组,依序连接为新数组。 |
| numpy.stack() | arrays | 将多个“同形状”的数组,依序合并为新数组。 |
| numpy.hstack()、numpy.vstack() | arrays | 将多个“同形状”的数组,“水平”或“垂直”合并为新数组。 |
numpy.concatenate()
numpy.concatenate() 会将多个“同样形状”的数组,依序连接为新数组,如果数组形状不同,合并会发生错误。下方的程序会将 a、b、c 三个数组,依序连接为新数组 ( 同样都是一维数组不考虑内容多寡 )。
import numpy as np
a = np.array([1])
b = np.array([2,2])
c = np.array([3,3,3])
d = np.concatenate((a, b, c))
print(d) # [1 2 2 3 3 3]
下方的程序会将 a 和 b 两个分别是 3x2 和 2x2 的数组,连接成一个新的 5x2 数组。
import numpy as np
a = np.array([[1,1],[2,2],[3,3]])
b = np.array([[4,4],[5,5]])
c = np.concatenate((a, b))
print(c)
'''
[[1 1]
[2 2]
[3 3]
[4 4]
[5 5]
[6 6]]
'''
numpy.concatenate() 还可以设定参数 axis,0 表示 row 轴 ( 默认值 ),1 为 column 轴,如果数组形状不同,合并会发生错误。
import numpy as np
a = np.array([[1,1],[2,2],[3,3]]) # 3x2 陣列
b = np.array([[4,4],[5,5],[6,6]]) # 3x2 陣列
# b = np.array([[4,4],[5,5],[6,6,6]]) # 如果 b 的形狀和 a 不同,會發生錯誤
c = np.concatenate((a, b), axis=0) # axis 設定為 0
print(c) # 連接變成 6x2 陣列
'''
[[1 1]
[2 2]
[3 3]
[4 4]
[5 5]
[6 6]]
'''
d = np.concatenate((a, b), axis=1) # axis 設定為 1
print(d) # 連接變成 3x4 陣列
'''
[[1 1 4 4]
[2 2 5 5]
[3 3 6 6]]
'''
numpy.stack()
numpy.stack() 会将多个“同样形状”的数组,依序堆积为新数组,如果数组形状不同,合并会发生错误。下方的程序会将 a、b、c 三个形状相同的 1x2 数组,依序合并一个 1x6 的新数组。
import numpy as np
a = np.array([1,1])
b = np.array([2,2])
c = np.array([3,3])
d = np.concatenate((a, b, c))
print(d) # [1 1 2 2 3 3]
numpy.stack() 还可以设定参数 axis,0 表示 row 轴 ( 默认值 ),1 为 column 轴,如果数组形状不同,合并会发生错误。
import numpy as np
a = np.array([[1,1],[2,2],[3,3]]) # 3x2 的陣列
b = np.array([[4,4],[5,5],[6,6]]) # 3x2 的陣列
c = np.stack((a, b), axis=0) # axis 設定為 0
print(c) # 堆積成為 2x3x2 的陣列
'''
[[[1 1]
[2 2]
[3 3]]
[[4 4]
[5 5]
[6 6]]]
'''
d = np.stack((a, b), axis=1) # axis 設定為 1
print(d) # 堆積成為 3x2x2 的陣列
'''
[[[1 1]
[4 4]]
[[2 2]
[5 5]]
[[3 3]
[6 6]]]
'''
numpy.hstack()、numpy.vstack()
numpy.hstack()、numpy.vstack() 会将多个“同形状”的数组,“水平”或“垂直”合并为新数组。
a = np.array([[1,1],[2,2],[3,3]]) # 3x2 陣列
b = np.array([[4,4],[5,5],[6,6]]) # 3x2 陣列
c = np.hstack((a, b)) # 水平合併
print(c) # 變成 3x4 的陣列
'''
[[1 1 4 4]
[2 2 5 5]
[3 3 6 6]]
'''
d = np.vstack((a, b)) # 垂直合併
print(d) # 變成 6x2 的陣列
'''
[[1 1]
[2 2]
[3 3]
[4 4]
[5 5]
[6 6]]
'''
微信扫码关注
抖音扫码关注