【问题标题】:ordering numpy by one column and then another (as a subset) whilst preserving row order按一列排序 numpy,然后按另一列(作为子集)排序,同时保留行顺序
【发布时间】:2019-02-07 18:10:05
【问题描述】:

我有一个 numpy 数组 -

 a = np.array([[1,23],[5,4],[56,12], [7,29], [3,4], [2,15],[2,8], [4,8]])

并希望先按第 1 列然后按第 0 列排序,同时保留行顺序。我已经设法按轴 1 订购它 -

 a = a[a[:,1].argsort()]

 array([[ 5,  4],
   [ 3,  4],
   [ 4,  8],
   [ 2,  8],
   [56, 12],
   [ 2, 15],
   [ 1, 23],
   [ 7, 29]])

但第0列也需要在第1列的升序内升序,例如:

array([[ 3,  4],
   [ 5,  4],
   [ 2,  8],
   [ 4,  8],
   [56, 12],
   [ 2, 15],
   [ 1, 23],
   [ 7, 29]])

如何做到这一点?

【问题讨论】:

  • 查看 lexsort。

标签: python arrays numpy sorting


【解决方案1】:

尝试将sorted 与多个键一起使用:

a = np.array([[1,23],[5,4],[56,12], [7,29], [3,4], [2,15],[2,8], [4,8]])

>>> np.array(sorted(a, key=lambda x: (x[1], x[0]))) # sort col 1 then col 0.
array([[ 3,  4],
       [ 5,  4],
       [ 2,  8],
       [ 4,  8],
       [56, 12],
       [ 2, 15],
       [ 1, 23],
       [ 7, 29]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2017-11-28
    • 2011-01-25
    相关资源
    最近更新 更多