一、什麼是Numpy Squeeze?
Numpy是Python中一個重要的科學計算庫,它提供了許多常用的數學函數、數組處理功能和線性代數等等。而squeeze()函數是Numpy中一個非常方便的方法,它可以刪除數組形狀中長度為1的維度(或軸),從而降低數組的維度。
通常當我們讀取或者生成數據時,往往會生成長度為1的維度,這時候使用squeeze()就能夠去除這些維度。比如:
import numpy as np a = np.zeros((1, 3, 1, 5)) print(a.shape) #(1, 3, 1, 5) b = np.squeeze(a) print(b.shape) #(3, 5)
可以看到,b是a去除了長度為1的維度後的結果,這樣我們就能處理更加高維度的數組。
二、Numpy Squeeze常用參數
除了基本用法外,還有一些常用參數可以拓展Numpy的squeeze()方法,這裡介紹一些:
1. axis
該參數表示要去除的維數,比如axis=1表示去除第二個軸的長度為1的維度;也可以傳入一個list表示要去除多個維度,如下:
import numpy as np a = np.zeros((1, 3, 1, 5)) print(a.shape) #(1, 3, 1, 5) b = np.squeeze(a, axis=[0, 2]) print(b.shape) #(3, 5)
可以看到,axis參數傳入為[0, 2],表示去除第1和第3個軸的長度為1的維度。
2. keepdims
該參數表示是否保留被刪除的長度為1的維度,keepdims=True時,結果數組與原數組在被去除的位置保持一致,只是各維度的長度變為1,如下:
import numpy as np a = np.zeros((1, 3, 1, 5)) print(a.shape) #(1, 3, 1, 5) b = np.squeeze(a, keepdims=True) print(b.shape) #(1, 3, 5)
可以看到,去除長度為1的維度後,結果數組的形狀變為了(1,3,5),保留了最外層的長度為1的維度。
三、Numpy Squeeze的實際應用
Numpy的squeeze()方法非常強大,可以用於處理各種不規則的數據類型,下面介紹一些實際應用。
1. 圖像數據的處理
在計算機視覺領域中,經常會遇到讀取的圖像數據是四維的(batch_size, height, width, channel),當batch_size=1時,依然會存在長度為1的維度,這時我們可以使用squeeze()方法去除這一維度。
import cv2 import numpy as np image = cv2.imread('image.jpg') image = np.expand_dims(image, axis=0) #(1, H, W, C) result = np.squeeze(image) #(H, W, C)
2. 數組的處理和拼接
在數據處理過程中,經常會遇到數據維度不匹配的問題,這時我們可以使用squeeze()方法進行處理。比如,我們有兩個數組a(10,1,3,1)和b(10,1,3),可以使用squeeze()方法進行拼接,如下:
import numpy as np a = np.zeros((10,1,3,1)) b = np.zeros((10,1,3)) result = np.concatenate((a, b), axis=-1) result = np.squeeze(result)
這樣,我們就能將a和b拼接在一起,並去除長度為1的維度,得到形狀為(10,3,2)的結果。
3. 模型輸出結果的處理
在深度學習中,經常會遇到模型輸出的張量存在長度為1的維度,這時我們可以使用squeeze()方法進行處理。比如我們有一個(10, 1, 5)的張量,可以使用squeeze()方法刪除第二個維度,得到形狀為(10,5)的結果。
import tensorflow as tf model = tf.keras.models.load_model('model.h5') predict_result = model.predict(image) #(1, 10, 5) result = np.squeeze(predict_result, axis=0) #(10, 5)
四、總結
本文詳細介紹了Numpy squeeze()方法的基本用法和常用參數,並給出了一些實際應用的示例。大家在編寫科學計算或者深度學習代碼時,可以靈活運用此方法,處理各種大多維度的數組。
原創文章,作者:AXQD,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135049.html