Python 二维数组使用lexsort(排序)

时间:2025-03-08 07:40:37
""" 1. 对指定行排序时 相同行中有相同的数时,参照相同数的上一行的大小 2. 若还相等,继续递进 """ #arr2为自己设计的数据 arr2 = np.array([[1, 2, 1, 3], [4, 3, 3, 1], [4, 5, 6, 7]]) print("原数组为:\n", arr2) #指定了arr2从第2行(此行对应索引号为1)排序,若有相等值,继续在相等值所在上一行比较,往前一直递推到第一行完结束 ind2 = np.lexsort(arr2[0:2, :]) print('\n排序后对应的索引为:', ind2, '\n') #两种还原数组的方法 A = arr2.T[ind2].T B = arr2[:, ind2] print("按要求排序后数组为:") print("A:\n", A) print("B:\n", B) print('*'*30) """ 1. 对指定列排序时 相同列中有相同的数时,参照相同数的上一列的大小 2. 若还相等,继续递进 """ #arr3为自己设计的数据 arr3 = np.array([[50, 50, 90], [90, 75, 80], [60, 70, 80], [85, 75, 80]]) print("原数组为:\n", arr3, '\n') #1. 对arr3是按最后一列数值大小排序 排序后若最后一列相等,则在相等值对应的上一列再次比较,排序 若还有相等,往前递进 #2. 将 对列数值大小排序 转变到 默认为对行数值大小排序() #3. 返回排序后行每一元素所在列的索引 ind3 = np.lexsort(arr3.T) print("排序后对应的索引为:", ind3, '\n') #两种还原数组的方法 print("按要求排序后数组为:") #根据行索引,列索引显示 print("A:\n", arr3[ind3, :]) print("B:\n", arr3[ind3, :]) print('*'*30) #指定了arr3从最后一列排序,若有相等值,继续在相等值所在上一列比较,往前一直递推到第2列(此列对应索引号为1)结束 ind4 = np.lexsort(arr3.T[1:, :]) print("\n排序后对应的索引为:", ind4, '\n') print("按要求排序后数组为:") print(arr3[ind4, :])