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])

更新於:2019年7月30日

578 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告