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


使用场景:

  1. 对指定行或列排序
  2. 先对某列排序;若有相等值,再根据相等值所在行(或列)排序;若还有想等值,一直往前递推

下面为几组数据介绍,可以理理思路

"""
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. 将 对列数值大小排序 转变到 默认为对行数值大小排序(arr3.T)
#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, :])

  

 

来源

https://blog.csdn.net/zyripe/article/details/105152987


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM