对二维数组Python进行排序在数组中输出为数组

时间:2017-11-24 03:42:18

标签: python arrays sorting numpy

所以我试图通过数组中的第三项对这样的数组进行排序:

[[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])]

似乎是数组中的某种数组?

有谁知道为什么要这样做?

1 个答案:

答案 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中的行进行索引