【问题标题】:Sorting 2-D Array Python Outputing as array within an array将二维数组 Python 输出为数组中的数组
【发布时间】:2017-11-24 03:42:17
【问题描述】:

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

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

似乎是数组内部的某种数组?

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

【问题讨论】:

  • Numpy 数组?您可以对最后一列进行 argsort 并重新索引。
  • 你想要的输出也是数组中的数组结构;你到底想要什么?

标签: python arrays sorting numpy


【解决方案1】:

如果您正在处理 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 中的行

【讨论】:

  • 这非常有效,谢谢!出于教育目的,您介意解释一下这条线吗? array[:,-1] 究竟是什么意思?
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多