NumPy 數(shù)組屬性說明和實例
NumPy 數(shù)組的維數(shù)稱為秩(rank),即數(shù)組的維度,一維數(shù)組的秩為 1,二維數(shù)組的秩為 2,以此類推。
NumPy中,每一個線性的數(shù)組稱為是一個軸(axis),axis=0,表示沿著第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿著第1軸進行操作,即對每一行進行操作。
比如說,二維數(shù)組相當于是兩個一維數(shù)組,其中第一個一維數(shù)組中每個元素又是一個一維數(shù)組。
所以一維數(shù)組就是 NumPy 中的軸(axis),第一個軸相當于是底層數(shù)組,第二個軸是底層數(shù)組里的數(shù)組。而軸的數(shù)量——秩,就是數(shù)組的維數(shù)。
NumPy 的數(shù)組中比較重要 ndarray 對象屬性有
numpy 支持的數(shù)據(jù)類型比 Python內(nèi)置數(shù)據(jù)類型要多很多,基本上可以和 C 語言的數(shù)據(jù)類型對應上,其中部分類型對應為 Python 內(nèi)置的類型。下表列舉了常用 NumPy 基本類型。
ndarray.ndim - 秩,即軸的數(shù)量或維度的數(shù)量。ndarray.shape - 數(shù)組的維度,對于矩陣,n 行 m 列。ndarray.size - 數(shù)組元素的總個數(shù),相當于 .shape 中 n*m 的值。ndarray.dtype - ndarray 對象的元素類型。ndarray.itemsize - ndarray 對象中每個元素的大小,以字節(jié)為單位。ndarray.flags - ndarray 對象的內(nèi)存信息。ndarray.real - ndarray元素的實部。ndarray.imag - ndarray 元素的虛部。ndarray.data - 包含實際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個屬性。
ndarray.ndim 用于返回數(shù)組的維數(shù),等于秩。
>>> import numpy as np >>> a = np.arange(24) >>> print (a.ndim) 1 # a 現(xiàn)只有一個維度 >>> b = a.reshape(2,4,3) >>> print (b.ndim) 3 # b 現(xiàn)在擁有三個維度
ndarray.shape 表示數(shù)組的維度,返回一個元組,這個元組的長度就是維度的數(shù)目,即 ndim 屬性(秩)。比如,一個二維數(shù)組,其維度表示"行數(shù)"和"列數(shù)"。
ndarray.shape 也可以用于調(diào)整數(shù)組大小。
>>> import numpy as np >>> a = np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]]) >>> print(a.shape) (2, 6) >>> a.shape = (6,2) >>> print(a) [[1 2] [3 4] [5 6] [4 5] [6 7] [8 9]]
同時,在NumPy中也提供了 reshape 函數(shù)來調(diào)整數(shù)組大小,具體實例如下:
>>> import numpy as np >>> a = np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]]) >>> b = a.reshape(6,2) >>> print(b) [[1 2] [3 4] [5 6] [4 5] [6 7] [8 9]]
ndarray.size是數(shù)組中元素的數(shù)量。等于np.prod(a.shape),即數(shù)組尺寸的乘積。
a.size返回一個標準的任意精度Python整數(shù)。對于其他獲得相同值的方法,情況可能并非如此(如建議的方法np.prod(a.shape),該方法返回的一個實例np.int_),并且如果該值在可能溢出固定大小的整數(shù)類型的計算中進一步使用,則可能是相關的。
>>> import numpy as np >>> x = np.zeros((3, 5, 2), dtype=np.complex128) >>> x.size 30 >>> np.prod(x.shape) 30
>>> import numpy as np >>> x array([[0, 1], [2, 3]]) >>> x.dtype dtype('int32') >>> type(x.dtype)
ndarray.itemsize 以字節(jié)的形式返回數(shù)組中每一個元素的大小。
例如,一個元素類型為 float64 的數(shù)組 itemsiz 屬性值為 8(float64 占用 64 個 bits,每個字節(jié)長度為 8,所以 64/8,占用 8 個字節(jié)),又如,一個元素類型為 complex32 的數(shù)組 item 屬性為 4(32/8)。
>>> import numpy as np >>> x = np.array([1,2,3,4,5], dtype = np.int8) >>> print (x.itemsize) 1 >>> y = np.array([1,2,3,4,5], dtype = np.float64) >>> print (y.itemsize) 8
ndarray.flags 返回 ndarray 對象的內(nèi)存信息,包含以下屬性:
C_CONTIGUOUS (C) - 數(shù)據(jù)是在一個單一的C風格的連續(xù)段中。F_CONTIGUOUS (F) - 數(shù)據(jù)是在一個單一的Fortran風格的連續(xù)段中。OWNDATA (O) - 數(shù)組擁有它所使用的內(nèi)存或從另一個對象中借用它。WRITEABLE (W) - 數(shù)據(jù)區(qū)域可以被寫入,將該值設置為 False,則數(shù)據(jù)為只讀。ALIGNED (A) - 數(shù)據(jù)和所有元素都適當?shù)貙R到硬件上。UPDATEIFCOPY (U) - 這個數(shù)組是其它數(shù)組的一個副本,當這個數(shù)組被釋放時,原數(shù)組的內(nèi)容將被更新。
>>> import numpy as np >>> a = np.array([1,2,3,4,5]) >>> print(a.flags) C_CONTIGUOUS : True F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False UPDATEIFCOPY : False
>>> import numpy as np >>> x = np.sqrt([1+0j, 0+1j]) >>> x.real array([1. , 0.70710678]) >>> x.real.dtype dtype('float64') >>> x.imag array([0. , 0.70710678]) >>> x.imag.dtype dtype('float64')