Python(17):Numpy之array数组的排序
目录
1.3. 使用Numpy中的argsort方法进行排序(返回脚标)
0. 相关文章链接
1. 简单排序
1.1. 创建Array数组
import numpy as np
demo_array = np.array([[1.5,1.3,7.5],
[5.6,7.8,1.2]])
demo_array
array([[1.5, 1.3, 7.5],
[5.6, 7.8, 1.2]])
1.2. 使用Numpy的sort方法进行排序(返回元素)
# 使用 numpy
print(demo_array)
print("======================")
print(demo_array.ndim)
print(demo_array.shape)
print("======================")
print(np.sort(demo_array))
print("====================== 以第0轴进行排序(二维中的竖)")
print(np.sort(demo_array,axis = 0))
print("====================== 以第1轴进行排序(二维中的横)")
print(np.sort(demo_array,axis = 1))
[[1.5 1.3 7.5]
[5.6 7.8 1.2]]
======================
2
(2, 3)
======================
[[1.3 1.5 7.5]
[1.2 5.6 7.8]]
====================== 以第0轴进行排序(二维中的竖)
[[1.5 1.3 1.2]
[5.6 7.8 7.5]]
====================== 以第1轴进行排序(二维中的横)
[[1.3 1.5 7.5]
[1.2 5.6 7.8]]
1.3. 使用Numpy中的argsort方法进行排序(返回脚标)
print(demo_array)
print("======================")
print(demo_array.ndim)
print(demo_array.shape)
print("======================")
print(np.argsort(demo_array))
print("====================== 以第0轴进行排序(二维中的竖),但是返回的是脚标")
print(np.argsort(demo_array, axis = 0))
print("====================== 以第1轴进行排序(二维中的横),但是返回的是脚标")
print(np.argsort(demo_array, axis = 1))
[[1.5 1.3 7.5]
[5.6 7.8 1.2]]
======================
2
(2, 3)
======================
[[1 0 2]
[2 0 1]]
====================== 以第0轴进行排序(二维中的竖),但是返回的是脚标
[[0 0 1]
[1 1 0]]
====================== 以第1轴进行排序(二维中的横),但是返回的是脚标
[[1 0 2]
[2 0 1]]
2. Numpy中的searchsorted方法
searchsorted方法的定义:在数组demo_array中插入数组values(并不执行插入操作),返回一个下标列表,这个列表指明了values中对应元素应该插入在 searchsorted 中那个位置上
print("====================== 使用linspace方法在0到10之间平均生成10个元素的Array对象")
demo_array = np.linspace(0,10,10)
print(demo_array)
print("======================")
values = np.array([2.5,6.5,9.5])
print(values)
print("====================== searchsorted 方法是在数组demo_array中插入数组values(并不执行插入操作)")
print("====================== 返回一个下标列表,这个列表指明了values中对应元素应该插入在 searchsorted 中那个位置上")
print(np.searchsorted(demo_array,values))
print(demo_array)
print(values)
====================== 使用linspace方法在0到10之间平均生成10个元素的Array对象
[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
======================
[2.5 6.5 9.5]
====================== searchsorted 方法是在数组demo_array中插入数组values(并不执行插入操作)
====================== 返回一个下标列表,这个列表指明了values中对应元素应该插入在 searchsorted 中那个位置上
[3 6 9]
[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
[2.5 6.5 9.5]
3. Numpy中的lexsort方法
lexsort方法定义( def lexsort(keys, axis=None) ):多级排序方法,为对给定的 keys 中的最后一个 key 排序,每一个 key 都被认为是列向量,其他 keys 用来辅助最后一个 key 进行排序。最后返回最后一个 key 进行排序的索引。
3.1. 创建Array数组
注意:该数组需要有重复元素
demo_array = np.array([[1,0,6],
[1,7,0],
[2,3,1],
[2,4,0]])
demo_array
3.2. 进行lexsort计算
示例代码:
print("====================== array1")
array1 = -1*demo_array[:,0]
print(array1)
print("====================== array2")
array2 = demo_array[:,2]
print(array2)
print("====================== lexsort计算")
index = np.lexsort([array1,array2])
print(index)
结果输出:
====================== array1
[-1 -1 -2 -2]
====================== array2
[6 0 1 0]
====================== lexsort计算
[3 1 2 0]
过程解释:
在上述代码中,可以看到传入的是array1和array2这两个Array对象
在进行计算时,会先计算后面的(即array2)的
第一次排序,因为使用 demo_array[:,2] ,即第二列来进行升序排序,所以第一次排序后的结果如下所示
[1, 0, 6] [1, 7, 0]
[1, 7, 0] => [2, 4, 0]
[2, 3, 1] [2, 3, 1]
[2, 4, 0] [1, 0, 6]
第二次平常,因为使用 -1*demo_array[:,0] ,即第零列来进行降序排序,所以第二次排序后的结果如下所示
[1, 7, 0] [2, 4, 0]
[2, 4, 0] => [1, 7, 0]
[2, 3, 1] [2, 3, 1]
[1, 0, 6] [1, 0, 6]
此时根据最后的结果,确定这些行在最开始Array对象中是属于哪些索引
新的第一行 [2, 4, 0] 在最开始的Array对象中是第四行(索引为3)
新的第二行 [1, 7, 0] 在最开始的Array对象中是第二行(索引为1)
新的第三行 [2, 3, 1] 在最开始的Array对象中是第三行(索引为2)
新的第四行 [1, 0, 6] 在最开始的Array对象中是第一行(索引为0)
所以,最后返回的结果为 [3, 1, 2, 0], 是一个 numpy.ndarray 对象
更详细解释可以查看相关博文: 博文
3.3. 使用lexsort方法的结果
使用lexsort方法时,会返回一个 numpy.ndarray 对象(即进行多级排序后的脚标数组),当需要对原数组进行该多级排序时,可以使用原数组调用该 lexsort 方法返回的Array对象即可。
print("====================== 原始数组")
print(demo_array)
print("====================== lexsort方法返回的结果(Array对象,其中的元素为索引)")
print(index)
print("====================== 原始数组调用索引数组,会对原始数组进行重新排序")
new_array = demo_array[index]
print(new_array)
====================== 原始数组
[[1 0 6]
[1 7 0]
[2 3 1]
[2 4 0]]
====================== lexsort方法返回的结果(Array对象,其中的元素为索引)
[3 1 2 0]
====================== 原始数组调用索引数组,会对原始数组进行重新排序
[[2 4 0]
[1 7 0]
[2 3 1]
[1 0 6]]
此时,会对原始Array对象进行重新排序。
注:其他Python相关系列文章链接由此进 -> Python文章汇总
相关文章
- Python怎么输入小数和整数_python输入非负整数
- 设置pycharm的python解释器_pycharm安装后无解释器
- python 生成数组_Python创建数组「建议收藏」
- 苹果电脑python官网下载步骤-Python下载和安装图文教程[超详细]
- python fileinput_Python之fileinput模块学习「建议收藏」
- python移动app开发_神奇的Kivy,让Python快速开发移动app
- python删除首行_Python删除文件第一行
- python数组拼接字符串_Python练习题——数组拼接
- unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme
- Python的命名规范「建议收藏」
- python socket recvfrom_Python:socket.recvfrom()不返回任何地址
- 迭代器Python_python进阶路线
- 【说站】python错误类型捕获的方法
- python读取pkl_Python读取文件的一段内容
- python django 数据库_Apache+Mysql+PHP/Python简单项目
- PyDbg安装(《Python 灰帽子》)
- python-数据库编程-如何在Python中连接到数据库
- python-Python与PostgreSQL数据库-处理PostgreSQL查询结果
- java中执行python脚本工具类详解编程语言
- Python开发系列课程(3) – 分支结构详解编程语言
- 小白的Python之路 day5 python模块详解及import本质编程语言
- Python私有函数和公开函数详解编程语言
- 浅谈Python类命名空间
- Python实现Oracle数据库连接(python连接oracle数据库)
- Python爬取MySQL数据,助力数据分析(python读取mysql数据)