从NumPy数组获取列式最大值

时间:2018-10-14 19:05:51

标签: numpy numpy-broadcasting

例如,我有一个2D阵列

x = np.random.rand(10, 3)

array([[ 0.51158246,  0.51214272,  0.1107923 ],
   [ 0.5210391 ,  0.85308284,  0.63227215],
   [ 0.57239625,  0.06276943,  0.1069803 ],
   [ 0.71627613,  0.66454443,  0.56771438],
   [ 0.24595493,  0.01007568,  0.84959605],
   [ 0.99158904,  0.25034553,  0.00144037],
   [ 0.43292656,  0.9247424 ,  0.5123086 ],
   [ 0.07224077,  0.57230282,  0.88522979],
   [ 0.55665913,  0.20119776,  0.58865823],
   [ 0.55129624,  0.26226446,  0.63070611]])

然后我沿着列找到最大元素的索引:

indexes = np.argmax(x, axis=0)

array([5, 6, 7])

到目前为止很好。

但是我实际上如何获得那些元素?也就是说,如何获得?some_operation?(x, indexes) == [0.99158904, 0.9247424, 0.88522979]

请注意,我需要索引和关联值。

我能想到的最好的方法是x[indexes, range(x.shape[1])],但它看起来有点复杂且效率低下。还有更惯用的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用np.amax沿轴查找最大值。

使用您的示例(x是您帖子中的原始数组)

In[1]: np.argmax(x, axis=0)
Out[1]: 
array([5, 6, 7], dtype=int64)

In[2]: np.amax(x, axis=0)
Out[2]: 
array([ 0.99158904,  0.9247424 ,  0.88522979])

Documentation link