numpy 中 np.unravel_index 使用

最近看到 np.unravel_index 这个函数,不知道这个函数是什么作用,上网查,网上说的也不是很明白,于是自己研究终于算是大体看懂了:

完整函数定义:unravel_index(indices, shape, order=‘C’)

函数作用:

首先,我们会问:indices是个啥呀? indices 就是索引值,可以是一个数,也可以是一个列表。
例如 indices = 1 ,indices = [3,12] 。
shape 代表的是数组的形状
函数的作用就是得到 indices 中每一项对应到形状为shape的数组中的坐标。这样说可能不清晰,我们看例子!:

实例:

假设有一个列表:[2,3,4,5,6,7,8,1,12,23,34,55]
我们要取得其中最小值的索引,睁眼以看,索引为:7 (从0开始)
但是当你用到了numpy的时候,你很难不将其变为数组吧(要不然你用numpy有啥用?),那我们就将其变成一个 3x4的矩阵吧!:

a = [2,3,4,5,6,7,8,1,12,23,34,55]
b = np.array(a).reshape((3,4))
print(b)

结果:
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 1],
[12, 23, 34, 55]])
既然我们已经转化为矩阵了,那么我如果再要想得到这个矩阵的最小值所对应的索引我应该怎么办?不能再用之前的 7 了吧。矩阵的索引需要是一个“坐标”,这样我们如何求这个坐标?此时unravel_index 就用上了:
indices 就是 7 (代表的是原来的索引),shape 就是(3,4)(代表的就是矩阵形状),而 order
由两种取值:“C”,“F”,“C”表示的是以横坐标为基准;“F”表示的是以纵坐标为基准。 例如:我们使用函数:np.unravel_index(7,(3,4),order=‘C’),得到结果为:(1,3)
如果我们使用函数:np.unravel_index(7,(3,4),order=‘F’),得到结果为:(1,2)

为什么会产生这种结果?
  1. 结果为(1,3):形状为(3,4)的矩阵为 3 行 4 列,设横纵坐标 x,y,则4*x+y=7,得出x=1,y=3,因此结果为(1,3)
  2. 结果为(1,2):形状为(3,4)的矩阵为 3 行 4 列,设横纵坐标 x,y,因为此时的order=“F”,所以要以纵坐标为基准 设横纵坐标 x,y,则3*y + x = 7 ,得到(4,1) 和 (1,2)两个结果,显然(4,1)超出了范围,因此选择(1,2)

你可能感兴趣的:(数据分析)