合併陣列
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]]
'''
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~