python基于numpy的多维数组排序

python基于numpy的多维数组排序

  • 1.根据数组中某一行的大小排序

    a.T[np.lexsort(a[0,None])].T    #按第0行的大小排序
    a.T[np.lexsort(a[-1,None])].T   #按最后一行的大小排序
    >>> a=np.array([[2,7,4,2],[35,9,1,5],[22,12,3,2]])
    >>> a
    array([[ 2, 7, 4, 2],
           [35, 9, 1, 5],
           [22, 12, 3, 2]])
    >>> a.T[np.lexsort(a[0,None])].T   #按第0行的大小排序
    array([[ 2, 2, 4, 7],
           [35, 5, 1, 9],
           [22, 2, 3, 12]])
    >>> a.T[np.lexsort(a[1,None])].T   #按第1行的大小排序
    array([[ 4, 2, 7, 2],
           [ 1, 5, 9, 35],
           [ 3, 2, 12, 22]])
    >>> a.T[np.lexsort(a[2,None])].T   #按第2行的大小排序
    array([[ 2, 4, 7, 2],
           [ 5, 1, 9, 35],
           [ 2, 3, 12, 22]])

    逆序排序

    >>> a.T[np.lexsort(-a[0,None])].T   #按第0行的大小逆序排序
    array([[ 7, 4, 2, 2],
           [ 9, 1, 35, 5],
           [12, 3, 22, 2]])
  • 2.根据数组中某一列的大小排序

    a[np.lexsort(a.T[0,None])]   #按第0列的大小排序
    a[np.lexsort(a.T[-1,None])]  #按最后一列的大小排序
    >>> a
    array([[ 2, 7, 4, 2],
           [35, 9, 1, 5],
           [22, 12, 3, 2]])
    >>> a[np.lexsort(a.T[0,None])]   #按第0列的大小排序
    array([[ 2, 7, 4, 2],
           [22, 12, 3, 2],
           [35, 9, 1, 5]])
    >>> a[np.lexsort(a.T[1,None])]   #按第1列的大小排序
    array([[ 2, 7, 4, 2],
           [35, 9, 1, 5],
           [22, 12, 3, 2]])
    >>> a[np.lexsort(a.T[2,None])]   #按第2列的大小排序
    array([[35, 9, 1, 5],
           [22, 12, 3, 2],
           [ 2, 7, 4, 2]])

    逆序排序

    >>> a[np.lexsort(-a.T[0,None])]   #按第0列的大小逆序排序
    array([[35, 9, 1, 5],
          [22, 12, 3, 2],
          [ 2, 7, 4, 2]])

猜你喜欢

转载自blog.csdn.net/u014292358/article/details/79503397