data = np.array([[7,6,3],[4,5,9],[7,8,9]])
查询最大值索引的常规操作是:np.argmax(data)
这个5代表:将数组降成一维后最大值的索引,即【7,6,3,4,5,9,7,8,9】的第一个9的索引
缺点:
1、我们需要的索引是二维的,5不是我们想要的,我们需要的是(1,2)
2、当存在多个最大值时,argmax只会返回第一个最大值的索引,如果我全都要呢?
自己动手写呗:
import numpy as np data = np.array([[7,6,3],[4,5,9],[7,8,9]]) print(data) # 寻找最大值的所有索引 def max_index(data): index = [] # 创建列表,存放最大值的索引 # data = data.A # 若data是矩阵,需先转为array,因为矩阵ravel后仍是二维的形式,影响if环节 dim_1 = data.ravel() # 转为一维数组 max_n = max(dim_1) # 最大值max_n for i in range(len(dim_1)): if dim_1[i] == max_n: # 遍历寻找最大值,并全部索引值进行操作 pos = np.unravel_index(i, data.shape, order='C') # 返回一维索引对应的多维索引,譬如4把转为(1,1),即一维中的第5个元素对应在二维里的位置是2行2列 index.append(pos) # 存入index print(index) # 打印