zoukankan      html  css  js  c++  java
  • 如何通过numpy获得二维或多维数组的最大、小值索引

    虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引。那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码:

    import numpy as np
    import math
    a = np.array([[1, 2, 3],
                  [4, 5, 6]])
    m, n = a.shape
    index = int(a.argmax())
    x = int(index / n)
    y = index % n
    print(x, y)
    >>>1 2

    虽然math和numpy都有取整的方法,math.ceil向上取整,math.floor向下取整,math.round四舍五入取整。但获得的结果是float型。所以这里使用int()向下取整获得int型结果。
    虽然我们实现了二维索引的获取,但是如果是三维呢?

    import numpy as np
    import math
    a = np.array([[[1, 2, 3],
                  [4, 5, 6]]])
    m, n, l = a.shape
    index = int(a.argmax())
    x = int(index / (n*l))
    index = index % (n*l)
    y = int(index/l)
    index = index % l
    z = index
    print(x, y, z)
    >>>0 1 2

    很好理解,但是很繁琐,这里有一种简单的方法利用np.unravel_index()获取索引。
    至于np.unravel_index函数https://blog.csdn.net/dn_mug/article/details/70256109说的比较清楚。

    对于二维数组:

    import numpy as np
    a = np.array([[1, 2, 3],
                  [4, 5, 6]])
    index = np.unravel_index(a.argmax(), a.shape)
    print(index)
    >>>(1, 2)

    三维数组:

    import numpy as np
    a = np.array([[[1, 2, 3],
                  [4, 5, 6]]])
    index = np.unravel_index(a.argmax(), a.shape)
    print(index)
    >>>(0, 1, 2)

    一句话搞定,获得二维或多维数组最值的索引。

  • 相关阅读:
    各种页的意义
    ecstore Fatal error: Class 'base_request' not found
    viewer.js 视图预览demo
    div在另一个div居中对齐
    文件权限解释rwx
    TPshop各个目录模块介绍
    tpshop linux安装下注意事项
    navicate 远程无法链接linux上mysql数据库问题
    关于破解邮箱的一点心得
    linux开启新端口
  • 原文地址:https://www.cnblogs.com/subic/p/8710946.html
Copyright © 2011-2022 走看看