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

NumPy怎樣使用花式索引或布爾索引訪問(wèn)元素?

更新時(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)的花式索引操作的示意圖如下圖所示。

二維數(shù)組

花式索引操作示意圖

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所示。

布爾索引操作示意圖

布爾索引示意圖

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