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)

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

  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/subic/p/8710946.html
Copyright © 2011-2022 走看看