一、基礎操作
ndarray拼接是NumPy中最基礎、最常用的操作之一。在NumPy中,可以通過concatenate、stack、hstack、vstack等函數、操作符實現拼接。其中,concatenate是最基本的數組拼接函數,可以水平地(按列)或垂直地(按行)拼接。stack函數可以用於將多個數組沿著新軸合併,可以在列和行方向上增加新軸。hstack和vstack分別是水平Stack和垂直Stack的簡寫,用於水平或垂直堆疊數組。
以下是一個基礎操作的代碼示例:
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) # Output: [[1 2] # [3 4] # [5 6]]
二、axis參數的說明
在NumPy中,拼接函數都有一個axis參數,默認值為0。這個參數定義了拼接的軸,即沿著哪個軸進行拼接。對於2D的數組,axis=0表示按行拼接,axis=1表示按列拼接。對於3D的數組,axis=0表示按深度拼接,axis=1表示按行拼接,axis=2表示按列拼接。
以下是一個axis參數的解析示例:
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.concatenate((a, b), axis=0) print(c) # Output: [[1 2] # [3 4] # [5 6] # [7 8]] d = np.array([[1, 2], [3, 4]]) e = np.array([[5, 6], [7, 8]]) f = np.concatenate((d, e), axis=1) print(f) # Output: [[1 2 5 6] # [3 4 7 8]]
三、vstack和hstack的區別
vstack和hstack分別用於垂直和水平堆疊數組,它們的區別在於拼接的方向。vstack按行方向拼接,hstack按列方向拼接。對於拼接的數組,它們的維度必須相同。
以下是一個vstack和hstack的差異比較:
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.vstack((a, b)) d = np.hstack((a, b)) print(c) # Output: [[1 2] # [3 4] # [5 6] # [7 8]] print(d) # Output: [[1 2 5 6] # [3 4 7 8]]
四、stack函數的使用
在前面的操作中,我們已經看到了將多個數組沿著新軸合併的操作。這個操作可以使用NumPy的stack函數完成。它可以用於將多個數組沿著新軸合併,也可以在列和行方向上增加新軸。
以下是一個stack函數使用的示例:
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.stack((a, b), axis=0) d = np.stack((a, b), axis=1) print(c) # Output: [[[1 2] # [3 4]] # [[5 6] # [7 8]]] print(d) # Output: [[[1 2] # [5 6]] # [[3 4] # [7 8]]]
五、r_和c_的使用
r_和c_是NumPy中的兩個特殊對象,可以用於將切片對象沿著第一軸拼接。r_將切片沿著列方向拼接,c_則將切片沿著行方向拼接。
以下是一個r_和c_的代碼示例:
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.r_[a, b] d = np.c_[a, b] print(c) # Output: [[1 2] # [3 4] # [5 6] # [7 8]] print(d) # Output: [[1 2 5 6] # [3 4 7 8]]
六、總結
在NumPy中,ndarray拼接是十分基礎和常用的操作之一。除了基礎的concatenate函數和基於它的stack、hstack、vstack之外,還可以使用r_、c_函數進行切片的拼接。在使用時需要熟悉軸的概念和操作。這些操作為科學計算提供了強大的支持,方便實現一些高級的操作。
原創文章,作者:RIRSJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370470.html