##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]]