更新時間:2022-04-06 來源:黑馬程序員 瀏覽量:
除了整數(shù)索引之外,numpy 中還提供了兩個形式比較復(fù)雜的索引——花式索引和布爾索引,下面對這兩種索引的基本用法進行詳細的講解。
花式索引指以整數(shù)組成的數(shù)組或列表為索引。當使用花式索引訪問一維數(shù)組時,程序會將花式索引對應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個索引獲取對應(yīng)位置的元素,并將這些元素以數(shù)組的形式返回 ;當使用花式索引訪問二維數(shù)組時,程序會將花式索引對應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個索引獲取對應(yīng)位置的一行元素,并將這些行元素以數(shù)組的形式返回。接下來,創(chuàng)建一個一維數(shù)組,使用花式索引獲取該數(shù)組的多個元素,代碼如下。
In []: import numpy as npa rray_1d = np.arange(1, 10) print(array_1d) print("------------") # 訪問索引為[2,5,8]的元素 print(array_1d[[2, 5, 8]]) Out []: [1 2 3 4 5 6 7 8 9] ------------ [3 6 9]
以上代碼首先創(chuàng)建了一個一維數(shù)組 array_1d,然后使用花式索引 [2,5,8] 訪問了該數(shù)組,依次返回索引為 2、5、8 的數(shù)據(jù)。由輸出結(jié)果可知,程序返回了一個包含 3 個元素的數(shù)組。
接下來,創(chuàng)建一個二維數(shù)組,使用花式索引獲取該數(shù)組的多行元素,代碼如下。
In []: array_2d = np.arange(1, 10).reshape((3, 3)) print(array_2d) # 訪問索引為[0,2]的元素 print(array_2d[[0, 2]]) Out []: [[1 2 3] [4 5 6] [7 8 9]] ------------ [[1 2 3] [7 8 9]]
需要說明的是,在使用兩個花式索引,即通過“二維數(shù)組 [ 花式索引 , 花式索引 ]”的形式訪問數(shù)組時,會將第一個花式索引對應(yīng)數(shù)組或列表的各元素作為行索引,將第二個花式索引對應(yīng)數(shù)組或列表的各元素作為列索引,再按照“二維數(shù)組 [ 行索引 , 列索引 ]”的形式獲取對應(yīng)位置的元素。例如,使用兩個花式索引訪問二維數(shù)組 array_2d 的元素,代碼如下。
In []: # 使用兩個花式索引訪問元素 print(array_2d[[0, 2], [1, 1]]) Out []: [2 8]
上述與二維數(shù)組相關(guān)的花式索引操作的示意如圖:
布爾索引指以布爾值組成的數(shù)組或列表為索引。當使用布爾索引訪問數(shù)組時,程序會將布爾索引對應(yīng)的數(shù)組或列表的元素作為索引,以獲取索引為 True 時對應(yīng)位置的元素。接下來,創(chuàng)建一個二維數(shù)組,獲取該數(shù)組中值大于 5 的元素,代碼如下。
In []: array_2d = np.arange(1, 10).reshape((3, 3)) print(array_2d) print("------------") # 使用布爾索引訪問元素 print(array_2d > 5) print("------------") print(array_2d[array_2d > 5]) Out []: [[1 2 3] [4 5 6] [7 8 9]] ------------ [[False False False] [False False True] [ True True True]] ------------ [6 7 8 9]
從輸出結(jié)果可以看出,程序返回了數(shù)組中與布爾數(shù)組 True 對應(yīng)的元素。上述二維數(shù)組相關(guān)的布爾索引操作的示意如圖 2-4 所示。