查询最小值索引的常规操作是:np.argmin(data)

这里的4代表:将数组降成一维后最小值的索引,即[5,2,3,2,1,2,1,4,6,6,5,1]的第一个1的索引。
①我们需要的索引是二维或者多维的,4不是我们想要的,我们需要的是(2,1)
②当存在多个最大值时,argmax只会返回第一个最大值的索引,不能返回全部的索引值
③只能返回最大最小值的索引,如果我们想返回指定值6的对应的索引呢?
以最小值为例,data为三维数组,直接上代码。
def min_index(data): # 寻找最小值的所有索引
index = [] # 创建列表,存放最小值的索引
# data = data.A # 若data是矩阵,需先转为array,因为矩阵ravel后仍是二维的形式,影响if环节
dim_1 = data.ravel() # 转为一维数组
min_n = min(dim_1) # 最大值max_n
for i in range(len(dim_1)):
if dim_1[i] == min_n: # 遍历寻找最大值,并全部索引值进行操作
pos = np.unravel_index(i, data.shape, order='C') # 返回一维索引对应的多维索引,譬如4把转为(1,1),即一维中的第5个元素对应在二维里的位置是2行2列
index.append(pos) # 存入index
return np.array(index)
data = np.array([[[3,2,3],[1,3,2],[1,4,6],[6,5,1]],[[1,2,3],[1,3,2],[1,4,6],[6,5,1]]])
min_index(data)
# 输出
# array([[0, 1, 0],
# [0, 2, 0],
# [0, 3, 2],
# [1, 0, 0],
# [1, 1, 0],
# [1, 2, 0],
# [1, 3, 2]], dtype=int64)
data依旧是三维数组,直接上代码。
def select_index(data, value): # 寻找指定值的所有索引
index = [] # 创建列表,存放最大值的索引
# data = data.A # 若data是矩阵,需先转为array,因为矩阵ravel后仍是二维的形式,影响if环节
dim_1 = data.ravel() # 转为一维数组
for i in range(len(dim_1)):
if dim_1[i] == value: # 遍历寻找最大值,并全部索引值进行操作
pos = np.unravel_index(i, data.shape, order='C') # 返回一维索引对应的多维索引
index.append(pos) # 存入index
return np.array(index)
data = np.array([[[3,2,3],[1,3,2],[1,4,6],[6,5,1]],[[1,2,3],[1,3,2],[1,4,6],[6,5,1]]])
select_index(data, 5)
# 输出
# array([[0, 3, 1],
# [1, 3, 1]], dtype=int64)