如何通过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)

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

原文地址:https://www.cnblogs.com/subic/p/8710946.html