Python數據分析之堆疊數組函數示例總結
numpy 堆疊數組
在做圖像和 nlp 的數組數據處理的時候,經常需要實現兩個數組堆疊或者連接的功能,這就需用到 numpy
庫的一些函數,numpy 庫中的常用堆疊數組函數如下:
stack
: Join a sequence of arrays along a new axis.hstack
: Stack arrays in sequence horizontally (column wise).vstack
: Stack arrays in sequence vertically (row wise).dstack
: Stack arrays in sequence depth wise (along third axis).concatenate
: Join a sequence of arrays along an existing axis.
ravel() 函數
ravel() 方法可讓將多維數組展平成一維數組。如果不指定任何參數,ravel() 將沿著行(第 0 維/軸)展平/拉平輸入數組。
示例代碼如下:
std_array = np.random.normal(3, 2.5, size=(2, 4)) array1d = std_array.ravel() print(std_array) print(array1d)
程序輸出結果如下:
[[5.68301857 2.09696067 2.20833423 2.83964393]
[2.38957339 9.66254303 1.58419716 2.82531094]]
[5.68301857 2.09696067 2.20833423 2.83964393 2.38957339 9.66254303 1.58419716 2.82531094]
stack() 函數
stack() 函數原型是 stack(arrays, axis=0, out=None),功能是沿著給定軸連接數組序列,軸默認為第0維。
1,參數解析:
- arrays: 類似數組(數組、列表)的序列,這裡的每個數組必須有相同的shape。
- axis: 默認為整形數據,axis決定瞭沿著哪個維度stack輸入數組。
2,返回:
- stacked :
ndarray
類型。The stacked array has one more dimension than the input arrays.
實例如下:
import numpy as np # 一維數組進行stack a1 = np.array([1, 3, 4]) # shape (3,) b1 = np.array([4, 6, 7]) # shape (3,) c1 = np.stack((a,b)) print(c1) print(c1.shape) # (2,3) # 二維數組進行堆疊 a2 = np.array([[1, 3, 5], [5, 6, 9]]) # shape (2,3) b2 = np.array([[1, 3, 5], [5, 6, 9]]) # shape (2,3) c2 = np.stack((a2, b2), axis=0) print(c2) print(c2.shape)
輸出為:
[[1 3 4] [4 6 7]]
(2, 3)
[[[1 3 5] [5 6 9]] [[1 3 5] [5 6 9]]] (2, 2, 3)
可以看到,進行 stack 的兩個數組必須有相同的形狀,同時,輸出的結果的維度是比輸入的數組都要多一維的。我們拿第一個例子來舉例,兩個含 3 個數的一維數組在第 0 維進行堆疊,其過程等價於先給兩個數組增加一個第0維,變為1*3的數組,再在第 0 維進行 concatenate()
操作:
a = np.array([1, 3, 4]) b = np.array([4, 6, 7]) a = a[np.newaxis,:] b = b[np.newaxis,:] np.concatenate([a,b],axis=0)
輸出為:
array([[1, 2, 3], [2, 3, 4]])
vstack()函數
vstack函數原型是vstack(tup),功能是垂直的(按照行順序)堆疊序列中的數組。tup是數組序列(元組、列表、數組),數組必須在所有軸上具有相同的shape,除瞭第一個軸。1-D arrays must have the same length.
# 一維數組 a = np.array([1, 2, 3]) b = np.array([2, 3, 4]) np.vstack((a,b))
array([[1, 2, 3], [2, 3, 4]])
# 二維數組 a = np.array([[1], [2], [3]]) b = np.array([[2], [3], [4]]) np.vstack((a,b))
array([[1], [2], [3], [2], [3], [4]])
hstack()函數
hstack()的函數原型:hstack(tup) ,參數tup可以是元組,列表,或者numpy數組,返回結果為numpy的數組。它其實就是**水平(按列順序)**把數組給堆疊起來,與vstack()函數正好相反。舉幾個簡單的例子:
# 一維數組 a = np.array([1, 2, 3]) b = np.array([2, 3, 4]) np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
# 二維數組 a = np.array([[1], [2], [3]]) b = np.array([[2], [3], [4]]) np.hstack((a,b))
array([[1, 2], [2, 3], [3, 4]])
vstack()和hstack函數對比:
這裡的v是vertically的縮寫,代表垂直(沿著行)堆疊數組,這裡的h是horizontally的縮寫,代表水平(沿著列)堆疊數組。 tup是數組序列(元組、列表、數組),數組必須在所有軸上具有相同的shape,除瞭第一個軸。
concatenate() 函數
concatenate()函數功能齊全,理論上可以實現上面三個函數的功能,concatenate()函數根據指定的維度,對一個元組、列表中的list或者ndarray進行連接,函數原型:
numpy.concatenate((a1, a2, ...), axis=0)
a = np.array([[1, 2], [3,4]]) b = np.array([[5, 6], [7, 8]]) # a、b的shape為(2,2),連接第一維就變成(4,2),連接第二維就變成(2,4) np.concatenate((a, b), axis=0)
array([[1, 2], [3, 4], [5, 6], [7, 8]])
註意:axis指定的維度(即拼接的維度)可以是不同的,但是axis之外的維度(其他維度)的長度必須是相同的。註意 concatenate 函數使用最廣,必須在項目中熟練掌握。
參考資料 numpy中的hstack()、vstack()、stack()、concatenate()函數詳解
以上就是Python數據分析之堆疊數組函數示例總結的詳細內容,更多關於Python堆疊數組函數的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- numpy中hstack vstack stack concatenate函數示例詳解
- numpy中數組拼接、數組合並方法總結(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)
- numpy數組合並和矩陣拼接的實現
- Python數組變形的幾種實現方法
- Python Numpy中ndarray的常見操作