一、numpy.argwhere簡介
numpy.argwhere函數是一個廣泛使用的函數,它用於查找索引,遍歷多維數組,並返回非零元素的位置坐標。
argwhere函數返回一個數組的所有非零元素的索引值(按照索引值的順序),並將其轉換為元組的形式。元組的第一維是非零元素的行號,第二維是非零元素的列號,以此類推。
import numpy as np # 創建一個多維數組 arr = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]]) # 使用numpy.argwhere函數查找非零元素的索引值 result = np.argwhere(arr) print(result)
輸出結果如下:
array([[0, 1], [1, 0], [1, 2], [2, 1]])
輸出結果表示這個多維數組中,有四個非零元素,它們的索引分別是(0,1),(1,0),(1,2)和(2,1)。
二、多維數組索引
在NumPy中,多維數組的索引需要指定多個維度上的索引值,我們可以使用numpy.argwhere函數來查找多維數組中指定元素的索引。
比如說,我們有一個多維數組,其中的數字表示一個8×8的棋盤,1代表棋子,0代表空格。我們現在要查找第一個棋子的坐標:
import numpy as np # 創建一個8×8的多維數組,其中的數字表示一個棋盤,1表示棋子,0表示空格 board = np.array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]) # 使用numpy.argwhere函數查找第一個棋子的索引 index = np.argwhere(board == 1) print(index[0])
輸出結果如下:
[1 1]
輸出結果表示第一個棋子所在的位置是(1,1)。
三、多維數組切片
在NumPy中,我們可以使用切片(slice)操作來截取多維數組中的一部分。切片的方式與Python中的列表、字符串等數據類型的切片方式相似。
比如說,我們有一個二維數組,我們想要截取其中的一部分,可以使用numpy.argwhere函數來確定我們需要截取的部分的範圍。
import numpy as np # 創建一個隨機的二維數組 arr = np.array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]]) # 使用numpy.argwhere函數查找我們需要切片的部分的範圍 index = np.argwhere((arr > 5) & (arr < 18)) # 根據索引值進行切片操作 result = arr[index[0,0]:index[-1,0]+1, index[0,1]:index[-1,1]+1] print(result)
輸出結果如下:
[[ 6 7 8] [11 12 13] [16 17]]
輸出結果表示,我們通過numpy.argwhere函數確定了需要截取部分的索引範圍,然後使用這個索引範圍對原本的多維數組進行了切片,得到了我們想要的部分。
原創文章,作者:WOCNV,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334999.html