我正在努力理解围绕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}}。
谢谢,
答案 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