python输出二维数组(矩阵)最大值(可重复)的全部索引值index、argmax的不足之处

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)  # 打印

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值