Python 二维数组使用lexsort(排序)
"""
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, :])