首頁技術文章正文

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

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

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

1.花式索引

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

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)建了一個一維數組array_ld,然后使用花式索引[2.5.8]訪問了該一維數組,即依次獲取索引2、5、8對應的元素3、6、9.并返回包含這幾個元素的數組。由輸出結果可知,程序輸出了一個包含3、6、9這3個元素的數組,說明使用花式索引成功地一次訪問了數組中的多個元素。

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

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

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

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

上述與二維數組相關的花式索引操作的示意圖如下圖所示。

二維數組

花式索引操作示意圖

2.布爾索引

布爾索引是以布爾值構成的數組為索引。當使用布爾索引訪問一個目標數組時,程序會將布爾數組中的每個布爾值作為索引,只要布爾值為True,就從目標數組中獲取與True位置對應的元素。需要說明的是,布爾數組的形狀必須與目標數組的形狀相同。接下來,創(chuàng)建一個二維數組,獲取該數組中值大于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)的二維數組array_2d,該數組中的元素為1~9;然后將array_2d數組進行布爾運算,判斷array_2d中的每個元素是否都大于5.大于5會得到布爾值 Tnue,小于5會得到布爾值False,所有的布爾值構成一個形狀與array_2d數組相同的布爾數組;最后將這個布爾數組作為布爾索引,通過布爾索引獲取array_2d數組中的元素。從輸出的結果可以看出,程序返回了array_2d數組中與布爾數組中Tnue位置對應的元素。

上述二維數組相關的布爾索引操作的示意圖如圖2-4所示。

布爾索引操作示意圖

布爾索引示意圖

分享到:
在線咨詢 我要報名
和我們在線交談!