NumPy庫(二)- 索引和切片
1. 基礎知識
ndarray物件的內容可以通過索引或切片來訪問和修改,與 Python 中 list 的切片操作一樣。ndarray 陣列可以基於 0 - n 的下標進行索引,切片物件可以通過內建的 slice 函式,並設定 start, stop 及 step 引數進行,從原陣列中切割出一個新陣列。
ndarray [start:stop:step]
start:表示陣列切片的起始下標
stop:表示陣列切片的結束下標
step:表示陣列切片的步長
注意:冒號 : 的解釋:如果只放置一個引數,如 [2],將返回與該索引相對應的單個元素。如果為 [2:],表示從該索引開始以後的所有項都將被提取。如果使用了兩個引數,如 [2:7],那麼則提取兩個索引(不包括停止索引)之間的項
import numpy as np data1 = np.array([1,2,3,4,5,6,7,8,9]) print('data1的前四項為:',data1[0:4])#返回下標為0到下標為4的前一項,索引不包括停止索引項 print('逆序輸出陣列元素:',data1[::-1])#逆向輸出陣列data1中的元素 print('以步長為2輸出0到0的元素:',data1[0:8:2])#返回從下標為0到下標為8的前一項,且步長為2 print('輸出data1中第一項之後的元素:',data1[1:])#返回下標為1後的所有元素,包括下標為1的元素
程式碼執行截圖

切片.png
2. 高階索引
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整數和切片的索引外,陣列可以由整數陣列索引、布林索引及花式索引。
import numpy as np data1 = np.array([1,2,3,4,5,6,7,8,9]) data2 = np.array([[1,2,3],[4,5,6],[7,8,9]]) data3 = data2[[0,1,0],[0,1,2]]#返回data2中(0,0),(1,1),(0,2)的元素 print("data2中座標為(0,0),(1,1),(0,2)的元素分別為:",data3) data4 = data2[data2>2]#布林索引,返回data2中元素值大於2的元素 print('data2中元素大於2的元素是:',data4) data5 = np.arange((24),dtype=int).reshape(4,6) print('修改形狀後的data5為:\n',data5) data6 = data5[[1,2]]#利用整數陣列進行索引,返回data5中的第1,2行(針對二維陣列而言) print("二維陣列中data6中第1行,第2行分別為:\n",data6) print("一維陣列中data1中第1個,第2個元素為:",data1[[0,1]])#利用整數陣列進行索引,返回data1中的第0,1個(針對一維陣列而言)
程式碼執行截圖:

image.png