一、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函数确定了需要截取部分的索引范围,然后使用这个索引范围对原本的多维数组进行了切片,得到了我们想要的部分。