Python資料處理之(七)Numpy array 合併
阿新 • • 發佈:2018-11-20
一、np.vstack()
對array
的合併,我們可以想到按行、按列等多種方式進行合併。
vertical stack
本身屬於一種上下合併,即對括號中的兩個整體進行對應操作。
>>> import numpy as np
>>> A=np.array([1,1,1])
>>> B=np.array([2,2,2])
>>> print(np.vstack((A,B)))
[[1 1 1]
[2 2 2]]
>>> C=np.vstack((A,B))
>>> print (A.shape,C.shape)
(3,) (2, 3)
>>> print(A)
[1 1 1]
二、np.hstack()
利用shape函式可以讓我們很容易地知道A和C的屬性,從打印出的結果來看,A僅僅是一個擁有3項元素的陣列(數列),而合併後得到的C是一個2行3列的矩陣。
介紹完了上下合併
,我們來說說左右合併
:
>>> D=np.hstack((A,B))
>>> 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.T)
[1 1 1]
>>> 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
函式顯得更加方便。