python 矩阵按列升序降序排列

矩阵或二维数组按列排序

要把矩阵按列来进行升序和降序排列是很容易想到的,来源于数据库的思想。
数据库中表的结构是由行列所组成的

行对应一条记录
列对应属性

在数据库里
“select……from …… order by …… DES (or ASE)”
语句很容易对查询结果按照某个属性进行降序(升序)排序
如果我们把数据库的表想象成一个二维数组,如何做好按列的排序呢?

首先想到的是借助np包功能实现,把数组变成一个矩阵,类似数据库里面的表(如果你学过R语言就更好理解了,即数据框结构)
然后根据某一列得到顺序,对每行进行调整

关键函数np.lexsort()

np.lexsort会返回从小到大(升序)的数组编号,比如[2,6,5]返回的是[0,2,1]代表从大到小分别是第一个,第三个和第二个

案例演示

下面提供一个案例演示,目的是按照某列对每个记录进行排序。
首先构造一个二维数组并矩阵化:

import numpy as np
a= np.array([[1,4,7],[2,9,9],[0,5,2]])

可查看数组

print(input_xy)

在这里插入图片描述

  1. 按照最后一列降序排列
print(a[np.lexsort(-a.T)])

结果:在这里插入图片描述

  1. 按照最后一列升序排列
    思路:转置矩阵后,按转置的矩阵第一行得到序号数字,再用原矩阵重新生成矩阵
    (注意注释)
print(a[np.lexsort(a.T)])         #a前面是否有负号决定升序降序,原理是取了相反数

在这里插入图片描述

  1. 按照第二列降序排列,如果第二列相同
    稍复杂一点,思路是把这一列拿出来得到顺序后,对原来的二维数组进行排序
print(a[np.lexsort([-a.T[1]])])  #1代表第二列,如果是0则代表按第一列

在这里插入图片描述
完毕

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值