从NumPy数组中获取列最大值
比如说,我有一个2D数组从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
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])