在使用 NumPy 進行科學計算或數據分析時,數組對象不僅存儲數據本身,還包含描述數組結構與內存布局的信息,這些信息被稱為數組屬性(array attributes)。
通過這些屬性,我們可以了解數組的維度結構、元素數量、數據類型以及內存占用情況,從而更好地理解數組的內部結構與計算行為。
NumPy 的數組屬性主要通過 ndarray 對象的屬性(attributes)提供訪問接口。與函數不同,這些屬性通常不需要調用,而是直接讀取。
按照功能劃分,NumPy 的數組屬性通常可以分為六類:
(1)結構屬性
(2)類型屬性
(3)存儲與內存屬性
(4)內存布局屬性
(5)結構變換相關屬性
(6)復數相關屬性
一、結構屬性
結構屬性用于描述數組的維度結構與形狀信息。
shape
返回數組在每個維度上的長度(元組)。
ndarray.shape示例:
print(a.shape)輸出:
(2, 3)表明這是一個 2 行 3 列的矩陣。
ndim
返回數組的維度數(整數)。
ndarray.ndim示例:
print(a.ndim)輸出:
2表明該數組是二維數組。
size
返回數組中包含的元素總數(整數)。
ndarray.size示例:
print(a.size)輸出:
6說明:size 等于 shape 各維度長度的乘積。
NumPy 還提供了 np.size() 函數來獲取元素總數:
np.size(a, axis=1)該函數還可以按指定軸獲得該軸的長度:
# 3二、類型屬性
類型屬性用于描述數組中元素的數據類型。
dtype
返回數組元素的數據類型(NumPy 的 dtype 對象)。
ndarray.dtype示例:
print(a.dtype)輸出:
int64NumPy 使用統一的數據類型系統(dtype),不同于 Python 的動態對象類型。
詳情請參閱:
itemsize
返回每個元素所占的字節數(整數)。
ndarray.itemsize示例:
print(a.itemsize)輸出:
4表明 int32 類型占用 4 字節。
三、存儲與內存屬性
這些屬性用于描述數組整體的存儲規模。
nbytes
返回數組元素所占的總字節數(整數)。
ndarray.nbytes示例:
print(a.nbytes)輸出:
16說明:nbytes = size × itemsize。
base
返回數組的底層數據來源對象。
ndarray.base如果數組是由切片或視圖(view)創建的,則 base 指向原數組。
base 可作為判斷數組是否與其他數組共享底層數據的重要線索,但并不適合作為唯一判斷依據。
示例:
print(b.base)輸出:
[1 2 3 4]b 并沒有復制數據,而是引用了 a 的數據緩沖區。
如果數組擁有自己的數據,則 base 為:None。
data
返回指向數組底層數據緩沖區的 Python buffer 接口對象(memoryview)。
ndarray.data示例:
print(a.data)輸出示例:
該屬性用于訪問底層內存緩沖區,通常只在底層接口或 C 擴展開發時使用。
四、內存布局屬性
NumPy 數組在內存中以字節序列的形式存儲,并通過 stride 機制描述各維度的訪問步長。某些數組(如切片或轉置結果)在內存中可能并不是連續存儲。
strides
數組在各維度上的步長(stride)。返回一個元組,表示在每個維度上移動一個索引單位時需要跨越的字節數。
ndarray.strides示例:
print(a.strides)示例輸出:
(24, 8)這表明:沿第 0 個維度(行方向)移動一個索引單位時,需要跨越 24 字節;沿第 1 個維度(列方向)移動一個索引單位時,需要跨越 8 字節。
對于 int64 類型(每個元素占 8 字節),每一行包含 3 個元素,因此行方向的步長為 3 × 8 = 24 字節。
關于 strides 的詳細介紹請參閱:
flags
返回數組的內存布局標志信息。
ndarray.flags示例:
print(a.flags)示例輸出:
ALIGNED : True常見標志含義:
C_CONTIGUOUS:數組按 C 語言的行優先順序連續存儲。
F_CONTIGUOUS:數組按 Fortran 的列優先順序存儲。
OWNDATA:數組是否擁有自己的數據緩沖區。
WRITEABLE:數組是否允許修改。
這些信息對于性能優化和底層計算庫調用非常重要。
flags 中還包含如 WRITEBACKIFCOPY 等較少直接使用的標志,此處僅列出常見項。
五、結構變換相關屬性
T
返回數組的轉置結果(transpose),在大多數情況下返回視圖(view),但具體行為取決于數組的內存布局。
ndarray.T示例:
print(a.T)輸出:
[3 6]]對二維數組而言,T 會交換行與列;對一維數組而言,T 不會改變結果。
六、復數相關屬性
當數組元素為復數類型(complex) 時,可以通過以下屬性訪問其實部與虛部。
real
返回數組元素的實部(real part)。
ndarray.real示例:
print(a.real)輸出:
[1. 3.]返回數組元素的實部組成的浮點類型數組(即使原數組為復數類型)。
imag
返回數組元素的虛部(imaginary part)。
ndarray.imag示例:
print(a.imag)輸出:
[2. 4.]real 與 imag 通常返回原數組的視圖,不會復制數據。
小結
NumPy 的 ndarray 通過一組屬性描述數組的結構、類型、存儲方式與內存布局。shape、ndim、size 用于理解數組形狀,dtype、itemsize 用于說明元素類型,nbytes、base、data、strides、flags、T、real、imag 則進一步揭示其底層組織與訪問方式。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.