NumPy Python基礎切片和高階索引
ndarray 的索引可以使用標準 Python x[obj] 語法完成,其中 x 是陣列,obj 是選擇。
有三種索引方式:
- 欄位訪問
- 基本切片
- 高階索引
使用哪種索引取決於 obj。在本節中,我們將主要關注基本切片和高階索引。
我們可以將高階索引分為兩部分:
- 整數陣列索引
- 布林索引
基本切片
Python 的基本切片概念擴充套件到 n 維。與 Python 切片物件一樣,它是透過向切片函式提供起始、結束和步長引數來構造的。為了獲得特定的輸出,將切片物件傳遞給陣列以提取陣列的一部分。
示例 1
import numpy as np arr = np.arange(25) s = slice(2, 21, 4) print (arr[s])
輸出
[ 2 6 10 14 18]
在上面的例子中,我們首先使用 arange() 函式建立了一個 ndarray 物件 (arr)。然後透過為其賦值起始、結束和步長值來建立一個切片物件 (s)。當我們將切片物件傳遞給 ndarray 時,我們得到陣列的一部分(切片),從索引 2 開始,到 21 結束,步長為 4。
另一種編寫上述程式的方法:
# Another way to write above program import numpy as np arr = np.arange(25) s = arr[2:21:4] print (s)
輸出
[ 2 6 10 14 18]
切片單個專案
#Slice single item from an array import numpy as np arr = np.arange(10) s = arr[9] print(s)
輸出
9
從索引開始切片專案
#slice item starting from index import numpy as np arr = np.arange(10) s = arr[3:] print(s)
輸出
[3 4 5 6 7 8 9]
切片索引之間的專案
#slice item between indexes import numpy as np arr = np.arange(10) s = arr[3: 7] print(s)
輸出
[3 4 5 6]
上述兩種方法也適用於多維 ndarray,如下所示:
#slice item between indexes import numpy as np arr = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7], [8], [9]]]) s = arr[1:] print(s)
輸出
[[[4] [5] [6]] [[7] [8] [9]]]
高階索引
整數陣列索引
讓我們建立一個包含整數的簡單陣列
arr=np.array([[1,2],[3,4],[5,6]]) print(arr)
輸出
[[1 2] [3 4] [5 6]]
讓我們嘗試從陣列中選擇特定元素,例如從多維 ndarray 中選擇行索引為 [0, 1, 2] 和列索引為 [1, 0, 1] 的元素。
import numpy as np arr=np.array([[1,2],[3,4],[5,6]]) s = arr[[0, 1, 2],[1, 0, 1]] print(s)
輸出
[2 3 6]
使用 0 索引將為您提供第一行:
>>> arr=np.array([[1,2],[3,4],[5,6]]) >>> print(arr[0]) [1 2]
類似地,我們可以從陣列中選擇單個專案,例如 - 選擇 1 作為行索引和 1 作為列索引的元素,這將給出陣列值為 4。
>>> print(arr[[1], [1]]) [4]
我們可以進行加法等算術運算,並在執行加法後返回特定索引的值。
>>> print(arr[[1], [1]]+ 1) [5]
我們可以看到索引值增加了 1,但實際陣列保持不變。
>>> arr array([[1, 2], [3, 4], [5, 6]])
但是我們可以更改陣列的值並返回陣列的新副本。
>>> arr[[1], [1]] +=1 >>> arr array([[1, 2], [3, 5], [5, 6]])
布林索引
當結果將是布林運算的結果時,我們使用布林索引。
>>> arr=np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]]) >>> arr array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
返回值為 1 的值。
>>> arr[arr == 1] array([1])
返回偶數值。
>>> arr[arr %2 == 0] array([ 0, 2, 4, 6, 8, 10])
廣告