Numpy array 合併

np.vstack()

對於一個array的合併,我們可以想到按行、按列等多種方式進行合併。首先先看一個例子:

import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B))) # vertical stack
"""
[[1,1,1]
[2,2,2]]
"""

vertical stack本身屬於一種上下合併,即對括號中的兩個整體進行對應操作。此時我們對組合而成的矩陣進行屬性探究:

C = np.vstack((A,B)) 
print(A.shape,C.shape)
# (3,) (2,3)

np.hstack()

利用shape函數可以讓我們很容易地知道A和C的屬性,從打印出的結果來看,A僅僅是一個擁有3項元素的數組(數列),而合併後得到的C是一個2行3列的矩陣。

介紹完了上下合併,我們來說說左右合併:

D = np.hstack((A,B)) # horizontal stack
print(D)
# [1,1,1,2,2,2]
print(A.shape,D.shape)
# (3,) (6,)

通過打印出的結果可以看出:D本身來源於A,B兩個數列的左右合併,而且新生成的D本身也是一個含有6項元素的序列。

np.newaxis()

說完了array的合併,我們稍稍提及一下前一節中轉置操作,如果面對如同前文所述的A序列, 轉置操作便很有可能無法對其進行轉置(因為A並不是矩陣的屬性),此時就需要我們藉助其他的函數操作進行轉置:

print(A[np.newaxis,:])
# [[1 1 1]]
print(A[np.newaxis,:].shape)
# (1,3)
print(A[:,np.newaxis])
"""
[[1]
[1]
[1]]
"""
print(A[:,np.newaxis].shape)
# (3,1)

此時我們便將具有3個元素的array轉換為了1行3列以及3行1列的矩陣了。

結合著上面的知識,我們把它綜合起來:

import numpy as np
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
C = np.vstack((A,B)) # vertical stack
D = np.hstack((A,B)) # horizontal stack
print(D)

"""
[[1 2]
[1 2]
[1 2]]
"""
print(A.shape,D.shape)
# (3,1) (3,2)

np.concatenate()

當你的合併操作需要針對多個矩陣或序列時,藉助concatenate函數可能會讓你使用起來比前述的函數更加方便:

C = np.concatenate((A,B,B,A),axis=0)
print(C)
"""
array([[1],
[1],
[1],
[2],
[2],
[2],
[2],
[2],
[2],
[1],
[1],
[1]])
"""
D = np.concatenate((A,B,B,A),axis=1)
print(D)
"""
array([[1, 2, 2, 1],
[1, 2, 2, 1],
[1, 2, 2, 1]])
"""

axis參數很好的控制了矩陣的縱向或是橫向打印,相比較vstack和hstack函數顯得更加方便。

最後

如果你覺得本文對你有幫助,希望可以關注並轉發,這樣我會更有動力更新的。


分享到:


相關文章: