深入解析numpy.shape

一、shape的概念

numpy是一個廣泛使用的Python科學計算庫,該庫可以幫助Python開發人員進行各種維度的數組計算。而shape就是numpy數組的一個屬性,可以用來表示數組的「形狀」,即數組每一維度的大小。numpy.shape返回的是一個元組,其中的每一個元素都表示數組在每一個維度上的大小。比如,(2,3)表示數組在第一維度上有2個元素,在第二維度上有3個元素。

import numpy as np
a = np.arange(15).reshape(3, 5)
print(a.shape)
# 輸出(3,5)

在上面的代碼中,首先創建了一個長度為15的一維數組,然後調用reshape方法將其變形成3行5列的矩陣,最後通過shape屬性列印出了矩陣的形狀。

二、numpy.shape和len的區別

numpy.shape和len都可以用來表示數組的長度,但是它們之間存在著一些重要的區別。len只能返回數組的第一個維度上的元素個數,而numpy.shape可以返回每一個維度上的元素個數。

b = np.array([[1, 2], [3, 4], [5, 6]])
print(len(b))  
# 輸出3
print(b.shape)  
# 輸出(3,2)

在上面的代碼中,首先創建了一個二維數組b,然後使用len列印出了其第一個維度上的元素個數,即為3。同時,使用numpy.shape列印出了該數組在每一個維度上的元素個數。

三、numpy.shape的使用場景

numpy.shape具有廣泛的使用場景,下面介紹一些常用的場景。

1. 矩陣轉置

在numpy中,可以使用T屬性將一個矩陣進行轉置操作。而利用numpy.shape獲取的元組便可以輕鬆地進行矩陣轉置。

c = np.array([[1.,2.],[3.,4.]])
print(c)
# 輸出[[1.,2.],[3.,4.]]
print(c.T)
# 輸出[[1.,3.],[2.,4.]]
print(c.shape)
# 輸出(2, 2)
print(c.T.shape)
# 輸出(2, 2)

2. 矩陣相乘

在使用numpy進行矩陣運算時,需要確保兩個矩陣的維度匹配。利用numpy.shape可以很方便地進行維度匹配。

d = np.array([[1, 2], [3, 4]])
e = np.array([[5, 6], [7, 8]])
print(np.dot(d, e))
# 輸出[[19 22],[43 50]]
print(d.shape,e.shape)
# 輸出(2, 2) (2, 2)

3. 圖像處理

在進行圖像處理時,利用numpy.shape可以很方便地獲取圖像的寬度和高度。

from PIL import Image
img = Image.open('test.jpg').convert('RGB')
img_arr = np.asarray(img)
print(img_arr.shape)
# 輸出(400, 640, 3)

在上面的代碼中,首先使用PIL庫打開一張圖片,並將其轉換為RGB模式,然後使用numpy.asarray將其轉換為numpy數組。最後,通過numpy.shape獲取了圖像的寬度、高度和通道數。

四、shape的小技巧

numpy.shape有一些小技巧可以幫助您更快地進行數組操作。

1. 一維數組

當使用numpy.shape操作一維數組時,可以將其轉換為長度為1的元組。

f = np.array([1,2,3])
print(f.shape)
# 輸出(3,)
print(f.reshape(1,-1).shape)
# 輸出(1, 3)

2. 數組維度轉換

當操作二維數組時,可以使用轉置操作和reshape來改變數組的形狀。

g = np.array([[1, 2], [3, 4]])
print(g.shape)
# 輸出(2, 2)
g = g.T
print(g.shape)
# 輸出(2, 2)
g = g.reshape((4, 1))
print(g.shape)
# 輸出(4, 1)

在上面的代碼中,首先創建了一個二維數組g,然後進行了轉置操作和reshape操作,分別將其轉換為了一個(2,2)大小和一個(4,1)大小的數組。

3. 數組形狀的推測

當使用numpy.shape操作多維數組時,可以推測出數組的元素個數。

h = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
print(h.shape)
# 輸出(2,2,2)
print(np.prod(h.shape))
# 輸出8

在上面的代碼中,首先創建了一個三維數組h。利用numpy.shape可以獲取到數組在每一個維度上的大小為2,2,2。而通過numpy.prod函數可以很容易地得出該數組的元素個數,為8。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199284.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-04 19:15
下一篇 2024-12-05 10:20

相關推薦

  • 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

發表回復

登錄後才能評論