一、基礎索引和切片
Numpy是Python的一種開源的科學計算庫,在進行科學和工程計算的時候,使用Numpy進行數組操作,可以避免Python列表的性能問題。Numpy中提供了豐富的數組操作,本文主要介紹優化數組操作的技巧——Numpy索引。
首先介紹Numpy的基礎索引和切片,這也是大部分讀者比較熟悉的操作。Numpy數組的索引和Python列表的索引類似。我們可以通過中括號來訪問數組中的元素,如下:
import numpy as np a = np.array([1, 2, 3, 4, 5, 6]) print(a[0]) # 輸出第一個元素 print(a[-1]) # 輸出最後一個元素
輸出結果為:
1 6
對於多維數組,我們可以使用逗號分隔的索引元組來訪問元素。如下:
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8 , 9]]) print(b[0, 0]) # 輸出第一個元素 print(b[1, 2]) # 輸出第二行第三列的元素
輸出結果為:
1 6
除了基礎的索引外,對於數組的切片,我們也可以使用類似Python列表的方式來進行:
c = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) print(c[1:5]) # 輸出索引1到4的元素 print(c[:5]) # 輸出前五個元素 print(c[4:]) # 輸出從索引4開始的所有元素 print(c[:-1]) # 輸出除了最後一個元素外的所有元素
輸出結果為:
[2 3 4 5] [1 2 3 4 5] [5 6 7 8 9] [1 2 3 4 5 6 7 8]
二、高級索引
除了基礎索引和切片外,Numpy還提供了高級索引。高級索引包括整數索引和布爾索引。
1. 整數索引
整數索引就是指我們以整數數組的形式來獲取數組中的元素。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print(a[[0, 1, 2], [0, 1, 0]]) # 輸出第一個、第二個和第三個元素的第一個和第二個值
輸出結果為:
[1 4 5]
上述代碼使用了整數數組 [0, 1, 2] 和 [0, 1, 0] 來獲取數組 a 中的元素。這相當於輸出了 a[0, 0]、a[1, 1] 和 a[2, 0] 三個元素的值。
2. 布爾索引
布爾索引就是指我們通過布爾表達式的返回值來獲取數組中的元素。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print(a[a > 3]) # 輸出數組 a 中大於 3 的元素
輸出結果為:
[4 5 6]
上述代碼使用了 a > 3 這個布爾表達式來獲取數組中大於 3 的元素。
三、花式索引
花式索引是指我們利用整數數組來進行索引。這個數組可以是任何形狀的,只要符合廣播規則即可。
1. 使用整數數組進行索引
使用整數數組進行索引時,我們可以將需要獲取的行和列分開使用整數數組進行獲取。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print(a[[0, 1], [1, 0]]) # 輸出第一行第二列和第二行第一列的元素
輸出結果為:
[2 3]
上述代碼中,使用了整數數組 [0, 1] 和 [1, 0] 來獲取數組 a 中的元素 a[0, 1] 和 a[1, 0]。
2. 使用布爾數組進行索引
使用布爾數組進行索引時,布爾數組的形狀與需要獲取的數據的形狀一致。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) b = np.array([True, False, True]) print(a[b, :]) # 輸出 a 的第一行和第三行
輸出結果為:
[[1 2] [5 6]]
上述代碼中,使用布爾數組 [True, False, True] 來獲取數組 a 中的第一行和第三行。
3. 使用切片和整數數組進行索引
使用切片和整數數組進行索引時,相當於把切片和整數數組混合使用。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print(a[1:, [0, 1]]) # 輸出第二行和第三行的第一列和第二列的元素
輸出結果為:
[[3 4] [5 6]]
上述代碼中,使用切片和整數數組 [0, 1] 來獲取數組 a 中的第二行和第三行的第一列和第二列的元素。
四、布爾數組的操作
除了使用布爾數組進行索引外,我們還可以對布爾數組進行操作,獲取一些常用的功能。
1. 判斷數組中是否存在某個值
我們可以使用 np.any 函數來判斷數組中是否存在某個值。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print(np.any(a == 1)) # 判斷數組 a 中是否存在值為 1 的元素
輸出結果為:
True
上述代碼使用 np.any(a == 1) 來判斷數組 a 中是否存在值為 1 的元素。
2. 使用布爾數組進行篩選
我們可以使用布爾數組進行篩選,獲取滿足條件的元素。如下:
import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) b = a[a > 3] print(b) # 輸出數組 a 中大於 3 的元素
輸出結果為:
[4 5 6]
上述代碼使用 a > 3 這個布爾表達式來獲取數組 a 中大於 3 的元素。
總結
Numpy的索引操作非常豐富,使用不同的索引方式可以方便地獲取數組中的元素。在實際應用中,我們應該根據自己的需求選擇最適合的索引方式,以優化數組操作的效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246924.html