1. 程式人生 > >Python資料處理之(七)Numpy array 合併

Python資料處理之(七)Numpy array 合併

一、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引數很好的控制了矩陣的縱向或是橫向列印,相比較vstackhstack函式顯得更加方便。