首頁技術(shù)文章正文

NumPy怎樣使用花式索引或布爾索引訪問元素?

更新時(shí)間:2022-10-27 來源:黑馬程序員 瀏覽量:

除了整數(shù)索引之外,NumPy中還提供了兩個形式比較復(fù)雜的索引——花式索引和布爾索引,下面對這兩種索引的基本用法進(jìn)行詳細(xì)的講解。

1.花式索引

花式索引指以整數(shù)組成的數(shù)組或列表為索引。當(dāng)使用花式索引訪問一維數(shù)組時(shí),程序會將花式索引對應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個索引獲取對應(yīng)位置的元素,并將這些元素以數(shù)組的形式返回;當(dāng)使用花式索引訪問二維數(shù)組時(shí),程序會將花式索引對應(yīng)的數(shù)組或列表的元素作為索引,依次根據(jù)各個索引獲取對應(yīng)位置的一行元素,并將這些行元素以數(shù)組的形式返回。接下來,創(chuàng)建一個一維數(shù)組,使用花式索引獲取該數(shù)組的多個元素,代碼如下。

In  []:   import numpy as np
          array_ld = np.arange (1, 10)
          print (array_1d)
          print("-
          訪問索引為[2,5,8]的元素
          print (array_1d[[2, 5, 8]])
          [1 2 3 45 6 7 8 9]
          ____________
          [36 9]
以上代碼首先創(chuàng)建了一個一維數(shù)組array_ld,然后使用花式索引[2.5.8]訪問了該一維數(shù)組,即依次獲取索引2、5、8對應(yīng)的元素3、6、9.并返回包含這幾個元素的數(shù)組。由輸出結(jié)果可知,程序輸出了一個包含3、6、9這3個元素的數(shù)組,說明使用花式索引成功地一次訪問了數(shù)組中的多個元素。

接下來,創(chuàng)建一個二維數(shù)組,使用花式索引獲取該數(shù)組的多行元素,代碼如下。

In  []:   array_2d - np.arange (1, 10).reshape((3, 3))
          print (array_2d)
          print("_______________")
          # 訪問索引為[0,2]的元素
          print(array_2d[[0, 2]])
            [[1 2 3]
            [4 5 6]
            [7 8 9]]
            [[1 2 3]
            [7 8 9]]

需要說明的是,在使用兩個花式索引,即通過“二維數(shù)組[花式索引,花式索引]”的形式訪問數(shù)組時(shí),會將第一個花式索引對應(yīng)數(shù)組或列表的各元素作為行索引,將第二個花式索引對應(yīng)數(shù)組或列表的各元素作為列索引,再按照“二維數(shù)組[行索引,列索引]”的形式獲取對應(yīng)位置的元素。例如,使用兩個花式索引訪問二維數(shù)組array_2d的元素,代碼如下。

In 1]:   #使用兩個花式索引訪問元素
         print (array_2d[[0, 2], [1, 1]])
           [2 8]

上述與二維數(shù)組相關(guān)的花式索引操作的示意圖如下圖所示。

二維數(shù)組

花式索引操作示意圖

2.布爾索引

布爾索引是以布爾值構(gòu)成的數(shù)組為索引。當(dāng)使用布爾索引訪問一個目標(biāo)數(shù)組時(shí),程序會將布爾數(shù)組中的每個布爾值作為索引,只要布爾值為True,就從目標(biāo)數(shù)組中獲取與True位置對應(yīng)的元素。需要說明的是,布爾數(shù)組的形狀必須與目標(biāo)數(shù)組的形狀相同。接下來,創(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])
         [{1 2 3]
          [4 5 6]
          [7 8 9]}
         ----------
         [[False False Falce]
          [False False Truf
          [ True True True]}
         ----------
          [6 7 8 9]

以上代碼中,首先創(chuàng)建了一個形狀為(3,3)的二維數(shù)組array_2d,該數(shù)組中的元素為1~9;然后將array_2d數(shù)組進(jìn)行布爾運(yùn)算,判斷array_2d中的每個元素是否都大于5.大于5會得到布爾值 Tnue,小于5會得到布爾值False,所有的布爾值構(gòu)成一個形狀與array_2d數(shù)組相同的布爾數(shù)組;最后將這個布爾數(shù)組作為布爾索引,通過布爾索引獲取array_2d數(shù)組中的元素。從輸出的結(jié)果可以看出,程序返回了array_2d數(shù)組中與布爾數(shù)組中Tnue位置對應(yīng)的元素。

上述二維數(shù)組相關(guān)的布爾索引操作的示意圖如圖2-4所示。

布爾索引操作示意圖

布爾索引示意圖

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!