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

不对之处,请指正:>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值