Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy中的3d阵列中。如何提取三维最大元素的索引?_Python_Arrays_Numpy_Multidimensional Array_Vectorization - Fatal编程技术网

Python 在numpy中的3d阵列中。如何提取三维最大元素的索引?

Python 在numpy中的3d阵列中。如何提取三维最大元素的索引?,python,arrays,numpy,multidimensional-array,vectorization,Python,Arrays,Numpy,Multidimensional Array,Vectorization,示例输入形状(2,2,2)的三维阵列: 我的3d阵列的形状为(N,N,N),在上面的示例中为N=2 我需要获得所有索引,以便第三维索引属于第三维中的最大元素,输出上述三维数组: [[0, 0, 1], # for element 2 [0, 1, 0], # for element 4 [1, 0, 1], # for element 6 [1, 1, 0]] # for element 8 如果我可以使用argmax或argwhere函数来实现这一点,那就太好了。我想避免迭代,

示例输入形状(2,2,2)的三维阵列:

我的3d阵列的形状为(N,N,N),在上面的示例中为N=2

我需要获得所有索引,以便第三维索引属于第三维中的最大元素,输出上述三维数组:

[[0, 0, 1],  # for element 2
 [0, 1, 0],  # for element 4
 [1, 0, 1],  # for element 6
 [1, 1, 0]]  # for element 8
如果我可以使用
argmax
argwhere
函数来实现这一点,那就太好了。我想避免迭代,看看是否可以使用numpy函数来实现这一点

这里有一种方法,使用获得沿第一和第二轴的所有索引,然后使用-

样本运行-

In [96]: a
Out[96]: 
array([[[38, 49, 15, 61, 29],
        [31, 88, 45, 88, 20],
        [17, 97, 58, 61, 14],
        [43, 77, 56, 92, 89]],

       [[48, 91, 49, 35, 58],
        [53, 34, 58, 92, 52],
        [20, 35, 70, 41, 81],
        [60, 42, 85, 82, 41]],

       [[45, 41, 32, 41, 25],
        [59, 32, 90, 18, 47],
        [24, 93, 29, 89, 12],
        [80, 27, 12, 51, 33]]])

In [97]: out
Out[97]: 
array([[0, 0, 3],
       [0, 1, 1],
       [0, 2, 1],
       [0, 3, 3],
       [1, 0, 1],
       [1, 1, 3],
       [1, 2, 4],
       [1, 3, 2],
       [2, 0, 0],
       [2, 1, 2],
       [2, 2, 1],
       [2, 3, 0]])

或者,由于这些索引基本上是重复的,我们可以使用
np.repeat
np.tile
获得这些索引数组,然后像以前一样使用
np.column\u stack
,如下所示-

d0 = np.arange(m).repeat(n)
d1 = np.tile(np.arange(n),m)
out = np.column_stack((d0,d1,d.ravel()))

6如何映射到[1,0,1]?我不明白您想要的输出。@YXD所以在这个3d数组中“6”在(1)个2d数组中,那么在那个(1)个2d数组中“6”在位置(0,1):给我(1,0,1)
In [96]: a
Out[96]: 
array([[[38, 49, 15, 61, 29],
        [31, 88, 45, 88, 20],
        [17, 97, 58, 61, 14],
        [43, 77, 56, 92, 89]],

       [[48, 91, 49, 35, 58],
        [53, 34, 58, 92, 52],
        [20, 35, 70, 41, 81],
        [60, 42, 85, 82, 41]],

       [[45, 41, 32, 41, 25],
        [59, 32, 90, 18, 47],
        [24, 93, 29, 89, 12],
        [80, 27, 12, 51, 33]]])

In [97]: out
Out[97]: 
array([[0, 0, 3],
       [0, 1, 1],
       [0, 2, 1],
       [0, 3, 3],
       [1, 0, 1],
       [1, 1, 3],
       [1, 2, 4],
       [1, 3, 2],
       [2, 0, 0],
       [2, 1, 2],
       [2, 2, 1],
       [2, 3, 0]])
d0 = np.arange(m).repeat(n)
d1 = np.tile(np.arange(n),m)
out = np.column_stack((d0,d1,d.ravel()))