python 对矩阵的(某一行/某一列)按照(升序/降序)排序,并输出排序后的矩阵。lexsor()函数实例

利用Python中的lexsort()处理对矩阵中按照某一行/列进行排序,具体实例由下给出:

首先生成矩阵a,按照a中某行/列进行排序

# -*- coding: cp936 -*-
import numpy as np

a=np.array([[1,2,5,3],[5,3,6,9],[7,2,9,5]])
print a

输出结果:

[[1 2 5 3]
[5 3 6 9]
[7 2 9 5]]

1.按行排序

#对矩阵最后一行进行排序
a1=np.lexsort(a)
print "对a的最后一行升序排序后的索引"
print a1

print "对a的最后一行排序后的矩阵"
#方法1
A=a.T[a1].T
print A

#方法2
A=a[:,a1]
print A

输出结果:

对a的最后一行升序排序后的索引
[1 3 0 2]

对a的最后一行排序后的矩阵
[[2 3 1 5]
[3 9 5 6]
[2 5 7 9]]
[[2 3 1 5]
[3 9 5 6]
[2 5 7 9]]

a1=np.lexsort(a[::-1,:])
print "对a的第一行升序排序后的索引"
print a1
print "对a的第一行排序后的矩阵"
A=a.T[a1].T
print A

输出结果:

对a的第一行升序排序后的索引
[0 1 3 2]
对a的第一行排序后的矩阵
[[1 2 3 5]
[5 3 9 6]
[7 2 5 9]]

a2=np.lexsort(a[0:2,:])
print "对a的第二行升序排序,得到的索引"
print a2

print "对a的第二行排序后的矩阵"
A=a.T[a2].T
print A

输出结果:

对a的第二行升序排序,得到的索引
[1 0 2 3]
对a的第二行排序后的矩阵
[[2 1 5 3]
[3 5 6 9]
[2 7 9 5]]

2.按列排序

对矩阵按照某一列升序排列,即将数组矩阵做转置,将列变成行,行变成列就可以了

#对a矩阵按照最后一列升序排列
a1=np.lexsort(a.T)#对a做转置,按照最后一行升序(相当于这里的最后一列)
print a1
print a[a1,:]#对应方法2

#对a矩阵按照最后一列降序排列
a1=np.lexsort(-a.T)
print a1
print a[a1,:]#对应方法2

输出结果:

[0 2 1]
[[1 2 5 3]
[7 2 9 5]
[5 3 6 9]]

[1 2 0]
[[5 3 6 9]
[7 2 9 5]
[1 2 5 3]]

#对a矩阵按照第一列升序排列
a1=np.lexsort(a[:,::-1].T)
print a1
print a[a1]

#对a矩阵按照第一列降序排列
a1=np.lexsort(-a[:,::-1].T)
print a1
print a[a1] 

输出结果:

[0 1 2]
[[1 2 5 3]
[5 3 6 9]
[7 2 9 5]]

[2 1 0]
[[7 2 9 5]
[5 3 6 9]
[1 2 5 3]]

#对a矩阵按照第二列升序排列,当遇到相同元素时按照第一列升序排列
a1=np.lexsort(a.T[:2,:])#对a做转置,按照第二行升序(相当于第二列升序)
print a1
print a[a1,:]#对应方法2

#对a矩阵按照第二列降序排列
a1=np.lexsort(-a.T[:2,:])
print a1
print a[a1,:]

输出结果:

[0 2 1]
[[1 2 5 3]
[7 2 9 5]
[5 3 6 9]]

[1 2 0]
[[5 3 6 9]
[7 2 9 5]
[1 2 5 3]]

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值