所以我试图通过数组中的第三项对这样的数组进行排序:
[[591 756 3]
[296 669 7]
[752 560 2]
[476 474 0]
[214 459 1]
[845 349 6]
[122 145 4]
[476 125 5]
[766 110 8]]
所以它看起来像
[[476 474 0]
[214 459 1]
[752 560 2]
[591 756 3]
....and so on]
这是我目前正在使用的代码:
sortedanswers = sorted(answithcpoints,key=lambda x:x[2])
但打印sortedanswers会输出类似
的内容[array([476, 474, 0]), array([214, 459, 1]), array([752, 560, 2]), array([591, 756, 3]), array([122, 145, 4]), array([476, 125, 5]), array([845, 349, 6]), array([296, 669, 7]), array([766, 110, 8])]
似乎是数组中的某种数组?
有谁知道为什么要这样做?
答案 0 :(得分:2)
如果您正在处理numpy数组,请不要将sorted
带入此中。在最后一列上调用argsort
,并使用已排序的索引重新排列数组 -
arr[arr[:, -1].argsort()]
array([[476, 474, 0],
[214, 459, 1],
[752, 560, 2],
[591, 756, 3],
[122, 145, 4],
[476, 125, 5],
[845, 349, 6],
[296, 669, 7],
[766, 110, 8]])
arr[:, -1]
抓取arr
arr[:, -1]
array([3, 7, 2, 0, 1, 6, 4, 5, 8])
arr[:, -1].argsort()
- 根据其索引对arr
的最后一列进行排序。结果是一组排序的索引x
arr[:, -1].argsort()
array([3, 4, 2, 0, 6, 7, 5, 1, 8])
arr[arr[:, -1].argsort()]
根据上一步中排序索引的内容对arr
中的行进行索引