更新時(shí)間:2022-10-27 來(lái)源:黑馬程序員 瀏覽量:
除了整數(shù)索引之外,NumPy中還提供了兩個(gè)形式比較復(fù)雜的索引——花式索引和布爾索引,下面對(duì)這兩種索引的基本用法進(jìn)行詳細(xì)的講解。
1.花式索引
花式索引指以整數(shù)組成的數(shù)組或列表為索引。當(dāng)使用花式索引訪問(wèn)一維數(shù)組時(shí),程序會(huì)將花式索引對(duì)應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個(gè)索引獲取對(duì)應(yīng)位置的元素,并將這些元素以數(shù)組的形式返回;當(dāng)使用花式索引訪問(wèn)二維數(shù)組時(shí),程序會(huì)將花式索引對(duì)應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個(gè)索引獲取對(duì)應(yīng)位置的一行元素,并將這些行元素以數(shù)組的形式返回。接下來(lái),創(chuàng)建一個(gè)一維數(shù)組,使用花式索引獲取該數(shù)組的多個(gè)元素,代碼如下。
In []: import numpy as np array_ld = np.arange (1, 10) print (array_1d) print("- 訪問(wèn)索引為[2,5,8]的元素 print (array_1d[[2, 5, 8]]) [1 2 3 45 6 7 8 9] ____________ [36 9]以上代碼首先創(chuàng)建了一個(gè)一維數(shù)組array_ld,然后使用花式索引[2.5.8]訪問(wèn)了該一維數(shù)組,即依次獲取索引2、5、8對(duì)應(yīng)的元素3、6、9.并返回包含這幾個(gè)元素的數(shù)組。由輸出結(jié)果可知,程序輸出了一個(gè)包含3、6、9這3個(gè)元素的數(shù)組,說(shuō)明使用花式索引成功地一次訪問(wèn)了數(shù)組中的多個(gè)元素。
接下來(lái),創(chuàng)建一個(gè)二維數(shù)組,使用花式索引獲取該數(shù)組的多行元素,代碼如下。
In []: array_2d - np.arange (1, 10).reshape((3, 3)) print (array_2d) print("_______________") # 訪問(wèn)索引為[0,2]的元素 print(array_2d[[0, 2]]) [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [7 8 9]]
需要說(shuō)明的是,在使用兩個(gè)花式索引,即通過(guò)“二維數(shù)組[花式索引,花式索引]”的形式訪問(wèn)數(shù)組時(shí),會(huì)將第一個(gè)花式索引對(duì)應(yīng)數(shù)組或列表的各元素作為行索引,將第二個(gè)花式索引對(duì)應(yīng)數(shù)組或列表的各元素作為列索引,再按照“二維數(shù)組[行索引,列索引]”的形式獲取對(duì)應(yīng)位置的元素。例如,使用兩個(gè)花式索引訪問(wèn)二維數(shù)組array_2d的元素,代碼如下。
In 1]: #使用兩個(gè)花式索引訪問(wèn)元素 print (array_2d[[0, 2], [1, 1]]) [2 8]
上述與二維數(shù)組相關(guān)的花式索引操作的示意圖如下圖所示。
花式索引操作示意圖
2.布爾索引
布爾索引是以布爾值構(gòu)成的數(shù)組為索引。當(dāng)使用布爾索引訪問(wèn)一個(gè)目標(biāo)數(shù)組時(shí),程序會(huì)將布爾數(shù)組中的每個(gè)布爾值作為索引,只要布爾值為True,就從目標(biāo)數(shù)組中獲取與True位置對(duì)應(yīng)的元素。需要說(shuō)明的是,布爾數(shù)組的形狀必須與目標(biāo)數(shù)組的形狀相同。接下來(lái),創(chuàng)建一個(gè)二維數(shù)組,獲取該數(shù)組中值大于5的元素,代碼如下。
In []: array_2d = np.arange (1, 10).reshape ((3, 3)) print(array_2d) print("-_______--") 使用布爾索引訪問(wèn)元素 print (array_2d > 5) print("----------") print (array_2d[array_2d > 5]) [{1 2 3] [4 5 6] [7 8 9]} ---------- [[False False Falce] [False False Truf [ True True True]} ---------- [6 7 8 9]
以上代碼中,首先創(chuàng)建了一個(gè)形狀為(3,3)的二維數(shù)組array_2d,該數(shù)組中的元素為1~9;然后將array_2d數(shù)組進(jìn)行布爾運(yùn)算,判斷array_2d中的每個(gè)元素是否都大于5.大于5會(huì)得到布爾值 Tnue,小于5會(huì)得到布爾值False,所有的布爾值構(gòu)成一個(gè)形狀與array_2d數(shù)組相同的布爾數(shù)組;最后將這個(gè)布爾數(shù)組作為布爾索引,通過(guò)布爾索引獲取array_2d數(shù)組中的元素。從輸出的結(jié)果可以看出,程序返回了array_2d數(shù)組中與布爾數(shù)組中Tnue位置對(duì)應(yīng)的元素。
上述二維數(shù)組相關(guān)的布爾索引操作的示意圖如圖2-4所示。
布爾索引示意圖