例如,我有一个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])]
,但它看起来有点复杂且效率低下。还有更惯用的方法吗?
答案 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])