从NumPy数组中获取列最大值

从NumPy数组中获取列最大值,numpy,array-broadcasting,Numpy,Array Broadcasting,比如说,我有一个2D数组 x=np.random.rand(10,3) 数组([[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.9915890

比如说,我有一个2D数组

x=np.random.rand(10,3)
数组([[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]])
然后我沿着列找到最大元素的索引:

index=np.argmax(x,轴=0)
数组([5,6,7])
到目前为止还不错

但我如何才能得到这些元素呢?也就是说,如何获得
?一些_操作?(x,索引)=[0.99158904,0.9247424,0.88522979]

注意,我需要索引和相关值


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

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

使用您的示例(
x
是您文章中的原始数组):


这是惯用的方式。但也要看看新的
np.take___轴
你应该使用
x[index,np.arange(x.shape[1])]
作为perf.@hpaulj你能把你的评论作为答案发表吗,这样我就可以接受了?一个完整的解决方案示例,包括任何效率提示。当然,但这是低效的。我们应该能够更好地遍历整个矩阵(这将是巨大的)两次:一次在
argmax
中,然后再次在
max
中。
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])