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