numpy中的vstack、hstack、dstack三種堆疊函數的區別
先假設有以下的數據(用作示範三種函數返回的結果)
import numpy as np
data1 = [
[[11, 12, 13], [14, 15, 16], [17, 18, 19]],
[[21, 22, 23], [24, 25, 26], [27, 28, 29]],
[[31, 32, 33], [34, 35, 36], [37, 38, 39]]
]
data2 = [
[[41, 42, 43], [44, 45, 46], [47, 48, 49]],
[[51, 52, 53], [54, 55, 56], [57, 58, 59]],
[[61, 62, 63], [64, 65, 66], [67, 68, 69]]
]
arr1 = np.array(data1)
arr2 = np.array(data2)
# arr1.shape == [3, 3, 3]
# arr2.shape == [3, 3, 3]
vstack() 函數
vstack() 函數表示將數組在第一維上進行堆疊(即最外層的方括號),可將arr1和arr2第一維內的部分看作一個整體,即:
arr1 == [塊1],
arr2 == [塊2]
vstack((arr1, arr2)) == [塊1 + 塊2]
則使用vstack函數:
a = np.vstack((arr1, arr2))
print(a)
# 結果如下
[
[[11, 12, 13], [14, 15, 16], [17, 18, 19]],
[[21, 22, 23], [24, 25, 26], [27, 28, 29]],
[[31, 32, 33], [34, 35, 36], [37, 38, 39]],
[[41, 42, 43], [44, 45, 46], [47, 48, 49]],
[[51, 52, 53], [54, 55, 56], [57, 58, 59]],
[[61, 62, 63], [64, 65, 66], [67, 68, 69]]
]
# 此時 a.shape == [6, 3, 3]
hstack() 函數
hstack() 函數表示將數組在第二維進行堆疊(即第二層方括號),可將arr1和arr2中第二層括號裏面的內容看作一個整體,即
arr1 == [
[塊1],
[塊2],
[塊3]
]
arr2 == [
[塊4],
[塊5],
[塊6]
]
# 然後 hstack((arr1, arr2)) 的結果如下:
[
[塊1 + 塊4],
[塊2 + 塊5],
[塊3 + 塊6]
]
使用hstack() 函數,得到:
b = np.hstack((arr1, arr2))
print(b)
# 結果如下:
[
[[11, 12, 13], [14, 15, 16], [17, 18, 19], [41, 42, 43], [44, 45, 46], [47, 48, 49]],
[[21, 22, 23], [24, 25, 26], [27, 28, 29], [51, 52, 53], [54, 55, 56], [57, 58, 59]],
[[31, 32, 33], [34, 35, 36], [37, 38, 39], [61, 62, 63], [64, 65, 66], [67, 68, 69]]
]
# 此時 b.shape == [3, 6, 3]
dstack() 函數
dstack() 函數表示將數組在第三維進行堆疊(即第三層方括號),可將arr1和arr2第三層括號裏面的內容看作一個整體,即:
arr1 = [
[[塊1], [塊2], [塊3]],
[[塊4], [塊5], [塊6]],
[[塊7], [塊8], [塊9]]
]
arr2 = [
[[塊11], [塊12], [塊13]],
[[塊14], [塊15], [塊16]],
[[塊17], [塊18], [塊19]]
]
# 然後 dstack((arr1, arr2)) 的結果如下:
[
[[塊1 + 塊11],[塊2 + 塊12],[塊3 + 塊13]]
[[塊4 + 塊14],[塊5 + 塊15],[塊6 + 塊16]]
[[塊7 + 塊17],[塊8 + 塊18],[塊9 + 塊19]]
]
使用dstack() 函數,得到:
print(c)
# 結果如下:
[
[[11 12 13 41 42 43],[14 15 16 44 45 46],[17 18 19 47 48 49]]
[[21 22 23 51 52 53],[24 25 26 54 55 56],[27 28 29 57 58 59]]
[[31 32 33 61 62 63],[34 35 36 64 65 66],[37 38 39 67 68 69]]
]
# 此時 c.shape == [3, 3, 6]
以上內容參考鏈接文章👇
參考文檔