虽然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)
一句话搞定,获得二维或多维数组最值的索引。