栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Numpy 二维数组,按某行或者某列排序

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Numpy 二维数组,按某行或者某列排序

##Numpy 二维数组,按某行或者某列排序
需求:对二维数组进行按某行或者某列排序

1.numpy.lexsort()不修改原数组,返回索引,小数序列在前,如果要倒叙前面加-负号
2.先对指定行列排序;若有相等值,再根据相等值所在行(或列)排序;
3.若还有想等值,一直往前递推,如果有多行列,顺序为从后往前
4.k[:,:]序列切片,获取全部序列,k[起:末:间隔(行),起:末:间隔(列)]不包含末数据
5.k.T 矩阵转置,行列互换

1.按最后一列排序

Original=np.array([[1,2,6,4],
                   [7,5,3,4],
                   [7,8,8,9]])
print("原型:n"+str(Original))
#按最后一列排序(x,y)(1,4)(2,4)(3,4)
sort=Original.T
print("1.按最后一个列排序(x,y)(1,4)(2,4)(3,4):n转型后:n"+str(sort))
sorted_index=np.lexsort(sort)
print("排序后输出序列:n"+str(sorted_index))
print("先对[4,4,9]排序得到[0,0,1],出现同等级的,再往前推对[6,3,8]排序得到[1,0,2]n")
print("排序后输出数组n"+str(Original[sorted_index]))


输出:
原型:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

1.按最后一个列排序(x,y)(1,4)(2,4)(3,4):
转型后:
[[1 7 7]
 [2 5 8]
 [6 3 8]
 [4 4 9]]

排序后输出序列:
[1 0 2]

先对[4,4,9]排序得到[0,0,1],出现同等级的,再往前推对[6,3,8]排序得到[1,0,2]

排序后输出数组
[[7 5 3 4]
 [1 2 6 4]
 [7 8 8 9]]

2.按最后一个列排序(x,y)(1,4)(2,4)(3,4),倒序

sort=Original.T
print("2.按最后一个列排序(x,y)(1,4)(2,4)(3,4)倒序:n转型后:n"+str(sort))
sorted_index=np.lexsort(-sort)
print("排序后输出序列:n"+str(sorted_index))
print("np.lexsort(-sort)在输入矩阵前加入符号为倒序n")
print("排序后输出数组n"+str(Original[sorted_index]))


输出:
原型:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

2.按最后一个列排序(x,y)(1,4)(2,4)(3,4)倒序:
转型后:
[[1 7 7]
 [2 5 8]
 [6 3 8]
 [4 4 9]]

排序后输出序列:
[2 0 1]

np.lexsort(-sort)在输入矩阵前加入符号为倒序

排序后输出数组
[[7 8 8 9]
 [1 2 6 4]
 [7 5 3 4]]

3.按第三列排序(某列)

sort=Original[:,:3].T
print("3.按第三列排序(x,y)(1,3)(2,3)(3,3):n"+str(sort))
sorted_index=np.lexsort(sort)
print("排序后输出序列:n"+str(sorted_index))
print("对[6,3,8]排序得到[1,0,2],Original[:,:3]=[[1,2,6],[7,5,3],[7,8,8]]"+"再对其进行转置n")
print("排序后输出数组n"+str(Original[sorted_index]))


输出:
原型:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

3.按第三列排序(x,y)(1,3)(2,3)(3,3):
[[1 7 7]
 [2 5 8]
 [6 3 8]]

排序后输出序列:
[1 0 2]
对[6,3,8]排序得到[1,0,2],Original[:,:3]=[[1,2,6],[7,5,3],[7,8,8]]再对其进行转置

排序后输出数组
[[7 5 3 4]
 [1 2 6 4]
 [7 8 8 9]]

4.按最后一行排序

#按最后一行排序(x,y)(3,1)(3,2)(3,3)(3,4)
sort=Original
print("4.按最后一行排序(x,y)(3,1)(3,2)(3,3)(3,4):n转型后:n"+str(sort))
sorted_index=np.lexsort(sort)
print("排序后输出序列:n"+str(sorted_index))
print("先对[7,8,8,9]排序得到[0,1,1,2],出现同等级的,再往前推对[7,5,3,4]排序得到[0,2,1,3]n")
print("排序后输出数组n"+str(Original.T[sorted_index].T))

原型:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

4.按最后一行排序(x,y)(3,1)(3,2)(3,3)(3,4):
转型后:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

排序后输出序列:
[0 2 1 3]

先对[7,8,8,9]排序得到[0,1,1,2],出现同等级的,再往前推对[7,5,3,4]排序得到[0,2,1,3]

排序后输出数组
[[1 6 2 4]
 [7 3 5 4]
 [7 8 8 9]]

5.按第一行排序(某行)

#按第一行排序(x,y)(1,1)(1,2)(1,3)(1,4)
sort=Original[:1,:]
print("5.按第一行排序(x,y)(1,1)(1,2)(1,3)(1,4):n转型后:n"+str(sort))
sorted_index=np.lexsort(sort)
print("排序后输出序列:n"+str(sorted_index))
print("先对[7,8,8,9]排序得到[0,1,1,2],出现同等级的,再往前推对[7,5,3,4]排序得到[0,2,1,3]n")
print("排序后输出数组n"+str(Original.T[sorted_index].T))

输出:
原型:
[[1 2 6 4]
 [7 5 3 4]
 [7 8 8 9]]

5.按第一行排序(x,y)(1,1)(1,2)(1,3)(1,4):
转型后:
[[1 2 6 4]]

排序后输出序列:
[0 1 3 2]

先对[7,8,8,9]排序得到[0,1,1,2],出现同等级的,再往前推对[7,5,3,4]排序得到[0,2,1,3]

排序后输出数组
[[1 2 4 6]
 [7 5 4 3]
 [7 8 9 8]]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号