【问题标题】:Sort 2D NumPy array by one of the columns按其中一列对 2D NumPy 数组进行排序
【发布时间】:2017-12-24 08:38:01
【问题描述】:

我虽然这会非常容易,但我有点挣扎。我的数据结构如下

array([[  5.        ,   3.40166205],
   [ 10.        ,   2.72778882],
   [ 15.        ,   2.31881804],
   [ 20.        ,   2.50643777],
   [  1.        ,   3.94076063],
   [  2.        ,   3.80598599],
   [  3.        ,   3.67121134],
   [  6.        ,   3.2668874 ],
   [  7.        ,   3.13211276],
   [  8.        ,   2.99733811],
   [  9.        ,   2.86256347],
   [ 11.        ,   2.64599467],
   [ 12.        ,   2.56420051],
   [ 13.        ,   2.48240635],
   [ 14.        ,   2.4006122 ],
   [ 16.        ,   1.8280531 ],
   [ 17.        ,   1.74625894],
   [ 18.        ,   1.66446479],
   [ 19.        ,   1.58267063],
   [ 20.        ,   1.50087647]])

而且我只想对第一列进行排序......所以它的排序如下:

array([[1.  ,  3.9], 
       [2.  ,  3.8], 
       ...  , 
       [20. ,  1.5]])

np.sort 似乎不起作用,因为它将数组移动到平面结构。我也用过itemgetter

from operator import itemgetter
sorted(data, key=itemgetter(1))

但这并没有给我我正在寻找的输出。

帮助表示赞赏!

【问题讨论】:

    标签: python arrays sorting numpy


    【解决方案1】:

    这是一个常见的 numpy 习语。您可以在这里使用argsort(在第一列)+ numpy 索引 -

    x[x[:, 0].argsort()]
    
    array([[  1.        ,   3.94076063],
           [  2.        ,   3.80598599],
           [  3.        ,   3.67121134],
           [  5.        ,   3.40166205],
           [  6.        ,   3.2668874 ],
           [  7.        ,   3.13211276],
           [  8.        ,   2.99733811],
           [  9.        ,   2.86256347],
           [ 10.        ,   2.72778882],
           [ 11.        ,   2.64599467],
           [ 12.        ,   2.56420051],
           [ 13.        ,   2.48240635],
           [ 14.        ,   2.4006122 ],
           [ 15.        ,   2.31881804],
           [ 16.        ,   1.8280531 ],
           [ 17.        ,   1.74625894],
           [ 18.        ,   1.66446479],
           [ 19.        ,   1.58267063],
           [ 20.        ,   2.50643777],
           [ 20.        ,   1.50087647]])
    

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2018-08-28
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 2021-08-05
      • 2011-02-19
      相关资源
      最近更新 更多