numpy.unravel_index()函数的用法
numpy.unravel_index()函数的作用是获取一个/组int类型的索引值在一个多维数组中的位置。
官方文档:

Screenshot from 2018-12-24 13-26-00.png
举个例子:
我有一个ndarray数组A,A.shape = [3, 3, 3, 2],A.dtype=np.int64。如何找到A中最大元素的索引???
1 yan@yanubuntu:~$ python 2 Python 2.7.12 (default, Nov 12 2018, 14:36:49) 3 [GCC 5.4.0 20160609] on linux2 4 Type "help", "copyright", "credits" or "license" for more information. 5 >>> import numpy as np 6 >>> A=np.random.randint(1,100,size=(3,3,3,2)) 7 >>> A 8 array([[[[25, 36], 9 [78, 83], 10 [97, 11]], 11 12 [[32, 37], 13 [14, 10], 14 [72, 92]], 15 16 [[34, 72], 17 [90, 61], 18 [62, 31]]], 19 20 21 [[[59, 41], 22 [53, 12], 23 [33, 62]], 24 25 [[72, 25], 26 [ 9, 19], 27 [64, 93]], 28 29 [[76, 42], 30 [98, 21], 31 [31, 40]]], 32 33 34 [[[58, 27], 35 [64, 78], 36 [52, 34]], 37 38 [[63, 45], 39 [79, 3], 40 [78, 2]], 41 42 [[ 5, 31], 43 [84, 15], 44 [64, 38]]]])
我可以使用np.argmax()函数来完成:
>>> ind_max=np.argmax(A)
>>> ind_max
32
此时得到的最大值索引是将A进行flatten成一维数组之后的索引值,如何得到最大元素在原数组A中的索引呢?这就是np.unravel_index()函数做的事情:
1 >>> ind_max_src=np.unravel_index(ind_max, A.shape) 2 >>> ind_max_src 3 (1, 2, 1, 0) 4 >>> A[1,2,1,0] 5 98
这里np.unravel_index()函数的第一个参数indices除了可以是int型标量值,还可以是一个int型数组,当indices为int型数组时,就是对数组中的每一个元素执行相同的运算过程。具体输出格式参考官方文档中的Examples。
另外一个函数numpy.ravel_multi_index(),执行和np.unravel_index()函数相反的运算。
来源:
https://www.jianshu.com/p/a7e19847bd39
https://www.jianshu.com/p/a7e19847bd39