亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

首頁 慕課教程 NumPy 入門教程 NumPy 入門教程 Numpy 數組高階操作函數(上)

數組高階操作函數(上)

Numpy 提供了一系列針對數組操作的高階函數。其中一類比較常見的是數組的合并。

1. 數組的合并與堆疊

1.1 numpy.concatenate 函數

numpy.concatenate 函數用于沿指定軸連接兩個或多個相同形狀的數組。該函數的原型如下:

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

參數說明如下:

參數 說明
a1,a2 … 相同類型的數組序列
axis 連接數組的軸的方向,默認值為0

案例

創建大小為 2×2 的二維數組 a 和 b:

a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])

查看數組:

print("數組a:")
print(a)
print("數組b:")
print(b)

打印結果為:

數組a:
[[1 2]
 [3 4]]
數組b:
[[5 6]
 [7 8]]

利用 concatenate 函數進行垂直方向的合并:

np.concatenate((a, b), axis=0)
out:
    array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

上述語句實現了:沿著 axis=0(對于二維數組,顯示為垂直)方向合并,合并的結果在垂直方向的維數擴充到 4,整個結果的數組大小為 4×2。

利用 concatenate 函數進行水平方向的合并:

np.concatenate((a, b), axis=1)
out:
    array([[1, 2, 5, 6],
       [3, 4, 7, 8]])

上述語句實現了:沿著 axis=1(對于二維數組,顯示為水平)方向合并,合并的結果在水平方向的維數擴充到 4,整個結果的數組大小為 1×4。

通過觀察上述過程,可以發現:concatenate 可以實現數組沿著某一軸向進行合并,合并后數組的維度保持不變。

案例

numpy.concatenate 函數可以一次性拼接多個數組:

np.concatenate((a, b, a, b), axis=1)
out:
    array([[1, 2, 5, 6, 1, 2, 5, 6],
       [3, 4, 7, 8, 3, 4, 7, 8]])

concatenate 函數可以接收不定長的數組序列,并按照指定的軸進行合并。

1.2 numpy.stack函數

numpy.stack 函數沿指定軸連接數組序列,該函數的原型如下:

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

參數說明如下:

參數 說明
a1,a2 … 相同類型的數組序列
axis 連接數組的軸的方向,默認值為0

案例

仍然指定拼接方向為 axis=0 方向,觀察與 concatenate 函數的區別:

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

該語句實現了把數據 a 和 b 在 axis=0(最外層)增加一層,進行堆疊:

array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

堆疊的結果為三維數組,其中 axis=0 方向(最外層)的組成元素分別對應為 a 和 b。

案例

指定拼接方向為 axis=1 方向,觀察與 concatenate 函數的區別:

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

該語句實現了把數據 a 和 b 在 axis=1 增加一層,再進行堆疊:

array([[[1, 2],
        [5, 6]],

       [[3, 4],
        [7, 8]]])

具體堆疊過程可以按照拆解為如下步驟:

  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([[1, 2, 5, 6],
       [3, 4, 7, 8]])

上述效果與 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([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

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

2. 小結

本節講述了數組合并與堆疊的幾種常用方法,其中concatenate函數與stack函數需要在使用中指定具體的計算方向,而vstack和hstack則默認了合并方向,使用過程中注意區分。