实现对数组或列表按照某一行或列进行排序。按照一个键值序列提供一个间接稳定的排序。
lexsort(keys, axis=-1)
-
利用lexsort对二维数组按照某一行排序
lexsort的键参数是二维数组时,对行排序,排序的方式是先对最后一行排序,当有相同元素时,然后按照倒数第二行对应的元素排序,……依次类推。
例如:a1返回的是a的最后一行按照从小到大排列后所对应的索引值,比如最后一行为[6,2,9,5],从小到大排列为:2,5,6,9;其对应的索引号为:1,3,0,2.
如果对a按照第二行升序排列,当有相同项时按照第一行升序排序.import numpy as np a = np.array([[1,2,1,5],[5,3,6,9],[6,2,9,5]]) a.shape a #对a按照最后一行排序 a1 = np.lexsort(a) a1 a.T[a1].T #或者 a[:, a1] #对a按照最后一行排序2 a4 = np.lexsort(a[-1, None]) a4 a.T[a4].T #对a按照第二行升序排列,当有相同项时按照第一行升序排序 a2 = np.lexsort(a[0:2, :]) a2 a.T[a2].T #或者 a[:, a2] #对a按照第一行排序 a3 = np.lexsort(a[::-1, :]) a3 a.T[a3].T #或者 a[:, a3] #对a按照第一行排序2 a5 = np.lexsort(a[0, None]) a5
-
利用lexsort对二维数组按照某一列排序
只需将数组矩阵做转置,将列变成行,行变成列就可以了。例如:对a矩阵按照第二列升序排列,当遇到相同元素时按照第一列升序排列。首先对a矩阵装置,这样矩阵的列变成了行,然后在对行按照第二行升序的方式排列,都获取相应的序列编号。a = np.array([[1,2,1,5],[5,3,6,9],[6,2,9,5]]) a.shape a #按最后一列顺序排序 a1 = np.lexsort(a.T) a1 a[a1] #或者 a[a1, :] #按最后一列顺序排序2 a5 = np.lexsort(a.T[-1, None]) a5 a[a5] #按最后一列逆序排序 a2 = np.lexsort(-a.T) a2 a[a2] #或者 a[a2, :] #按第二列升序排序,当遇到相同元素按照第一列升序排列 a3 = np.lexsort(a.T[:2, :]) a3 a[a3] #或者 a[a3, :] #按照第一列排序 a4 = np.lexsort(a[:, ::-1].T) a4 a[a4] #或者 a[a4, :] #按照第一列排序2 a6 = np.lexsort(a.T[0, None]) a6 a[a6]
参考资料
1.Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2.用python中的numpy.lexsort()对矩阵按照某行(列)排序
3.numpy函数学习