用argmax作为关键字对数组/矩阵进行排序是什么意思?

时间:2016-08-19 10:08:40

标签: python numpy

我正在努力理解围绕numpy排序主题的函数背后的机制。

    import numpy as np
    arr = [[8, 5, 9], 
            [3, 9.5, 5], [5.5, 4, 3.5], [6, 2, 1],
            [6,1,2],[3,2,1],[8,5,3]]
    res = sorted(arr, key=np.argmax)

这给了我以下结果:

    print(res)
    [[5.5, 4, 3.5], [6, 2, 1], [6, 1, 2],
      [3, 2, 1], [8, 5, 3], [3, 9.5, 5], [8, 5, 9]]  

我是R用户,对Python不太熟悉。我可能对“关键”论点的作用有一些线索,但对于这个例子我特别请求你的帮助。 在一个简单的例子中,如果将key参数定义为返回第一个元素的函数,那么sorted会根据第一个元素对数组进行排序,但我无法看到它如何与{ {1}}。 谢谢,

2 个答案:

答案 0 :(得分:2)

argmax函数返回最大元素的指示。它用作sort函数中的键。

如果你打印这个:

print([np.argmax(x) for x in arr])

你得到:

[2, 1, 0, 0, 0, 0, 0]

解释了排序。最后的元素首先出现在结果中,第一个元素最后出现,因为它具有最高标准,第二个元素出现在之前。

当然这是一个“弱”排序,因为标准通常会返回相同的值,因此结果取决于初始列表的顺序(编辑:这称为稳定排序,请参阅有趣的Bakuriu评论)

答案 1 :(得分:0)

np.argmax为您提供最大值的参数。在您的示例中,它作用于3个项目的每个单独列表,例如

>>> np.argmax([8,5,3])
0
>>> np.argmax([1,2,3])
2