numpy.unravel_index()函数的用法

0.4952018.12.24 13:42:23字数 254阅读 14,684

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 
 
posted @ 2021-04-26 14:40  锦绣良缘  阅读(899)  评论(0)    收藏  举报