一、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-hk/n/334999.html
微信掃一掃
支付寶掃一掃