argmax在2轴上为3-d numpy阵列

时间:2017-02-01 22:17:28

标签: python arrays numpy

我想从3D矩阵中获取一维索引数据。

例如,给定x = np.random.randint(10, size=(10,3,3)),我想像np.argmax(x, axis=(1,2))一样做np.max之类的事情,就像获得一个长度为10的一维数组一样大小为(3,3)的每个子矩阵的最大值的索引(0到8)。

到目前为止,我还没有找到任何有用的东西,我想避免在第一维上循环(并使用np.argmax(x)),因为它非常大。

干杯!

1 个答案:

答案 0 :(得分:1)

重塑以合并最后两个轴,然后使用 while(fscanf(f, "%c", &str) == 1) { //while((str=getchar()) != ',') if( str==',') { printf(" "); } else { printf("%c",str); } } -

np.argmax

示例运行 -

idx = x.reshape(x.shape[0],-1).argmax(-1)
out = np.unravel_index(idx, x.shape[-2:])

如果你的意思是获得合并索引,那么它更简单 -

In [263]: x = np.random.randint(10, size=(4,3,3))

In [264]: x
Out[264]: 
array([[[0, 9, 2],
        [7, 7, 8],
        [2, 5, 9]],

       [[1, 7, 2],
        [8, 9, 0],
        [2, 8, 3]],

       [[7, 5, 0],
        [7, 1, 6],
        [5, 1, 1]],

       [[0, 7, 3],
        [5, 4, 1],
        [9, 8, 9]]])

In [265]: idx = x.reshape(x.shape[0],-1).argmax(-1)

In [266]: np.unravel_index(idx, x.shape[-2:])
Out[266]: (array([0, 1, 0, 2]), array([1, 1, 0, 0]))

示例运行 -

x.reshape(x.shape[0],-1).argmax(1)