Numpy 數(shù)組屬性和方法
ndarray 對象預(yù)留了一些方法供我們調(diào)用,通過這些方法,我們可以查探到數(shù)組的一些基本信息,例如 dtype 可以查看數(shù)組的數(shù)據(jù)類型。本小節(jié)將介紹其他常用的方法,比如數(shù)組的大小、維數(shù)(秩)、元素的數(shù)據(jù)類型、每個元素的大小等等。
1. 數(shù)組的維數(shù)
1.1 ndim
數(shù)組的維數(shù),即數(shù)組的秩,用來表征數(shù)組軸的數(shù)量或維度的數(shù)量。對于行向量:
arr_1 = np.array([1,2,3])
arr_1
Out:
array([1, 2, 3])
這是一個典型的一維數(shù)組,其秩記為 1,也就是說行向量只有一個軸(axis)。
對于二維數(shù)組:
arr_2 = np.array([[1,2,3],[4,5,6]])
arr_2
Out:
array([[1, 2, 3],
[4, 5, 6]])
可以把該二維數(shù)組視作是兩個一維數(shù)組組成,其秩記為 2,也就是說二維數(shù)組有兩個數(shù)據(jù)軸。
我們可以用下圖來表征數(shù)組的數(shù)據(jù)軸:
在 Numpy 中數(shù)據(jù)軸記為 axis,其中 axis=0 記為最外層的軸。在二維數(shù)組中對應(yīng)于列方向(即為上圖的垂直方向)。
案例
通過 ndim 來查看一維數(shù)組的秩。
arr_1.ndim
Out:
1
通過ndim來查看二維數(shù)組的秩。
arr_2.ndim
Out:
2
2. 數(shù)組的維度
2.1 shape
數(shù)組的維度(n,m),即數(shù)組大小,對應(yīng)于矩陣的 n 行 m 列。
通常通過 shape 來查詢數(shù)組的維度,該方法返回一個元組,這個元組的長度就是維度的數(shù)目,即 ndim 屬性(秩)。元祖的元素分別表征各個數(shù)據(jù)軸上的元素的個數(shù)。
案例
我們用 shape 來查看一維數(shù)組的維度。
arr_1.shape
Out:
(3,)
可以看到一維數(shù)組只有一個數(shù)據(jù)軸,該數(shù)據(jù)軸上包含 3 個元素。
我們用shape來查看二維數(shù)組的維度。
arr_2.shape
Out:
(2, 3)
可以看到,arr_2 是一個 2 行 3 列(2×3)的數(shù)組。
2.2 reshape
ndarray 提供了一個不改變數(shù)組元素內(nèi)容、直接改變數(shù)組維度的方法:reshape。通過該方法,可以方便地對數(shù)組元素進(jìn)行重排。
reshape 的函數(shù)調(diào)用方法如下:
ndarray.reshape(newshape, order="C")
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
newshape | 變更后的數(shù)組維度 |
order | 數(shù)據(jù)元素重排方式,有C、F、A可選。“C”指的是用類C寫的讀/索引順序的元素,對二維數(shù)組,是優(yōu)先讀寫行;“F”是指用FORTRAN類索引順序讀/寫元素,對二維數(shù)組,是優(yōu)先讀寫列?!癆”表示排序方式跟隨原數(shù)組。 |
案例
利用 reshape 方法生成一個維度為 4*5、優(yōu)先讀寫行的二維數(shù)組。
np.array(range(20)).reshape((4,5), order="C")
這里用 range(20) 生成一個長度為20的有序序列,用 reshape 進(jìn)行重排序,order 表示優(yōu)先讀寫行。
Out:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
3. 數(shù)組元素的總個數(shù)
3.1 size
ndarray 提供了 size 方法,可以快速查看數(shù)組中元素的格式,該方法對應(yīng)于 shape 方法中 n*m 的值。
案例
快速查看二維數(shù)組的元素格式:
arr_2.size
Out:
6
可以看到,arr_2 數(shù)組共含有 6 個元素。
4. 查看數(shù)組元素的大小
4.1 itemsize
該方法以字節(jié)的形式返回?cái)?shù)組中每一個元素的大小。
例如:一個元素類型為 float64 的數(shù)組 itemsize 屬性值為 8。因?yàn)?float64 占用 64 個 bits,每個字節(jié)長度為 8,所以 64/8,占用 8 個字節(jié)。
又如:一個元素類型為 complex32 的數(shù)組 item 屬性為 4。因?yàn)?complex32 占用 32 個 bits,占用 4 個字節(jié)。
案例
先創(chuàng)建一個 dtype 為 int32 的數(shù)組,再查看其元素的大小。
x = np.array([1,2,3,4], dtype=np.int32)
x.itemsize
Out: 4
5. 小結(jié)
本節(jié)重點(diǎn)介紹了數(shù)組常用的屬性(維數(shù)、維度、元素個數(shù)、元素大?。?,其中 shape 與 reshape 是最常用的兩種方法。需要注意的是,reshape 方法和 range() 聯(lián)用,可以快速創(chuàng)建維數(shù)較高的數(shù)組,較為常用。