一日一技:Numpy进阶之排序小技巧
Numpy提供了大量用数组操作的函数,其中不乏常见的排序函数。
这里讲下numpy.sort
、numpy.argsort
、numpy.lexsort
三种排序函数的用法。
1、如何对数组元素进行快速排序?
使用numpy.sort
函数可以对数组进行排序,并返回排序好的数组。
使用方法:
1 | numpy.sort(a, axis=-1, kind=None, order=None) |
参数:
- a : 要排序的数组;
- axis :按什么轴进行排序,默认按最后一个轴进行排序;
- kind :排序方法,默认是快速排序;
- order : 当数组定义了字段属性时,可以按照某个属性进行排序;
1 | import numpy as np |
下面试下按照字段属性进行排序,需要用到order
参数。
1 | import numpy as np |
2、如何获取数组元素排序后的索引?
numpy.argsort
函数用于将数组排序后,返回数组元素从小到大依次排序的所有元素索引。
使用方法(和sort类似):
1 | numpy.argsort(a, axis=-1, kind=None, order=None) |
参数:
- a : 要排序的数组;
- axis :按什么轴进行排序,默认按最后一个轴进行排序;
- kind :排序方法,默认是快速排序;
- order : 当数组定义了字段属性时,可以按照某个属性进行排序;
1 | import numpy as np |
按字段属性进行排序,并获取索引。
1 | # 先给各字段配置属性类型 |
3、如何按多条件进行排序?
这里举一个应用场景:
小升初考试,重点班录取学生按照总成绩录取。
在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取……
这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
numpy.lexsort
函数用于按照多个条件(键)进行排序,返回排序后索引。
使用方法:
1 | numpy.lexsort(keys, axis=-1) |
参数:
- keys :序列或元组,要排序的不同的列;
- axis :沿指定轴进行排序;
说明:
使用键序列执行间接稳定排序。
给定多个排序键(可以将其解释为电子表格中的列),lexsort返回一个整数索引数组,该数组描述按多个列排序的顺序。
序列中的最后一个键用于主排序顺序,倒数第二个键用于辅助排序顺序,依此类推。
keys参数必须是可以转换为相同形状的数组的对象序列。
如果为keys参数提供了2D数组,则将其行解释为排序键,并根据最后一行,倒数第二行等进行排序。
1 | import numpy as np |
参考资料
[1]Numpy文档: https://numpy.org/devdocs/index.html
[2]Numpy教程: https://www.runoob.com/numpy/numpy-tutorial.html
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 盗计のBlog!
评论