一、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