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)

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

  • 相关阅读:
    组件间通信
    Android抓包方法(一)之Fiddler代理
    汉字转拼音
    post请求参数问题
    post请求参数设置
    swagger
    IfcPresentationDefinitionResource(介绍定义资源)
    Java计算两个日期之间的时间差(毫秒数)
    IfcPresentationAppearanceResource(外观定义资源)
    IfcMeasureResource(度量资源)
  • 原文地址:https://www.cnblogs.com/subic/p/8710946.html
Copyright © 2011-2022 走看看