【问题标题】:Sort a numpy array using multiple index and different order使用多个索引和不同的顺序对 numpy 数组进行排序
【发布时间】:2021-11-08 15:36:08
【问题描述】:

我有一个大小为 300x5 的数组,我试图对数组进行排序,索引 4 的列是我的主索引,按升序排列,索引 1 是二级索引,按降序排列,索引 3 是第三级索引和升序。 我已经使用以下代码进行了尝试,

idx = np.lexsort((arr[:,3],arr[:,1][::-1],arr[:,4]))
arr= arr[idx]

where arr --> array of size 300x5

执行此操作时,二级索引也会按升序而不是降序排序。谁能帮我解决这个问题

【问题讨论】:

  • 我想你想要-arr[:,1]而不是arr[:,1][::-1]
  • 谢谢@Stef,这解决了我的问题

标签: arrays python-3.x numpy sorting multiple-columns


【解决方案1】:

我认为这是你的答案,请检查并给我你的评论。

idx = np.lexsort((arr[:,3],arr[:,1],arr[:,4]))
arr = arr[idx][::-1]

【讨论】:

    【解决方案2】:

    我认为您希望 -arr[:,1] 而不是 arr[:,1][::-1] 作为二级索引。

    >>> import numpy as np
    >>> arr = np.random.randint(0, 21, (300, 5))
    >>> arr
    array([[ 0, 19,  6, 19, 17],
           [16,  2, 14, 17,  0],
           [ 8, 17,  3, 17, 12],
           ...,
           [ 4, 18, 18,  3,  8],
           [10, 15,  4, 12,  4],
           [ 9, 16, 12,  0, 12]])
    >>> idx = np.lexsort((arr[:,3],-arr[:,1],arr[:,4]))
    >>> arr = arr[idx]
    >>> arr
    array([[11, 20, 11, 18,  0],
           [11, 16, 12,  2,  0],
           [ 9, 16,  4,  8,  0],
           ...,
           [20,  4,  5, 11, 20],
           [ 9,  4,  0, 19, 20],
           [ 9,  2,  4, 10, 20]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多