更新時間:2022-09-05 來源:黑馬程序員 瀏覽量:
ndarray對象的元素可以通過索引和切片來訪問和修改,就像Python內(nèi)置的容器對象一樣。下面是一個一維數(shù)組,從表面上來看,該數(shù)組使用索引和切片的方式與Python列表的功能相差不大,具體代碼如下。
In [53]: import numpy as np In [54]: arr=np.arange(8) # 創(chuàng)建一個一維數(shù)組 In [55]: arr Out[55]: array([0, 1, 2, 3, 4, 5, 6, 7]) In [56]: arr[5] # 獲取索引為5的元素 Out[56]: 5 In [57]: arr[3:5] # 獲取索引為3~5的元素,但不包括5 In [58]: arr[1:6:2] # 獲取索引為1~6的元素,步長為2 Out[58]: array([1, 3, 5])
不過,對于多維數(shù)組來說,索引和切片的使用方式與列表就不大一樣了。在二維數(shù)組中,每個索引位置上的元素不再是一個標(biāo)量了,而是一個一維數(shù)組,具體示例代碼如下。
In [59]: import numpy as np In [60]: arr2d=np.array([1, 2, 3],[4,5,6],[7,8,9]) # 創(chuàng)建二維數(shù)組 In [61]: arr2d Out[61]: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) In [62]: arr2d[1] # 獲取索引為1的元素 Out[62]: array([4, 5, 6])
此時,如果我們想通過索引的方式來獲取二維數(shù)組的單個元素,就需要通過形如“arr[x,y]”,以逗號分隔的索引來實現(xiàn)。其中,x表示行號,y表示列號。示例代碼如下。
In [63]: arr2d[0, 1] # 獲取位于第0行第1列的元素 Out[63]: 2
接下來,通過一張圖來描述數(shù)組arr2d的索引方式,如圖2-3所示。從圖2-3中可以看出,arr2d是一個3行3列的數(shù)組,如果我們想獲取數(shù)組的單個元素,必須同時指定這個元素的行索引和列索引。例如,獲取索引位置為第1行第1列的元素,我們可以通過arr2d[1,1]來實現(xiàn)。
相比一維數(shù)組,多維數(shù)組的切片方式花樣更多,多維數(shù)組的切片是沿著行與列的方向選取元素的,我們可以傳入一個切片,也可以傳入多個切片,還可以將切片與整數(shù)索引混合使用。
圖2-3 arr2d的索引方式
傳入一個切片的示例代碼:
In [64]: arr2d[:2] Out[64]: array([[1, 2, 3], [4, 5, 6]])
傳入兩個切片的示例代碼:
In [65]: arr2d[0:2, 0:2] Out[65]: array([[1, 2], [4, 5]])
切片與整數(shù)索引混合使用的示例代碼:
In [66]: arr2d[1, :2] Out[66]: array([4, 5])
上述多維數(shù)組切片操作的相關(guān)示意圖,如圖2-4所示。
圖2-4 多維數(shù)組切片圖示