深入理解Numpy Squeeze

一、什麼是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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AXQD的頭像AXQD
上一篇 2024-10-04 00:10
下一篇 2024-10-04 00:10

相關推薦

  • Python矩陣轉置函數Numpy

    本文將介紹如何使用Python中的Numpy庫實現矩陣轉置。 一、Numpy庫簡介 在介紹矩陣轉置之前,我們需要了解一下Numpy庫。Numpy是Python語言的計算科學領域的基…

    編程 2025-04-28
  • Python列錶轉numpy數組

    本文將闡述Python中列表如何轉換成numpy數組。在科學計算和數據分析領域中,numpy數組扮演着重要的角色。Python與numpy的無縫結合使得數據操作更加方便和高效。因此…

    編程 2025-04-27
  • Python三大:NumPy、Pandas、matplotlib

    本文將詳細介紹三大Python數據處理及可視化庫——NumPy、Pandas以及matplotlib,為讀者提供從基礎使用到應用場景的全面掌握。 一、NumPy NumPy是Pyt…

    編程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、字節與比特 在討論byte轉int之前,我們需要了解字節和比特的概念。字節是計算機存儲單位的一種,通常表示8個比特(bit),即1字節=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • numpy中np.sort函數返回索引的使用方法

    本文將會提供關於使用numpy中np.sort函數返回索引的詳細解釋和使用方法 一、np.sort函數返回索引的基本語法 numpy中的np.sort函數可以將數組按照從小到大的順…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟件,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25

發表回復

登錄後才能評論