NumPy排序的实现


Posted in Python onJanuary 21, 2020

numpy.sort()函数

该函数提供了多种排序功能,支持归并排序,堆排序,快速排序等多种排序算法
使用numpy.sort()方法的格式为:
numpy.sort(a,axis,kind,order)

  • a:要排序的数组
  • axis:沿着排序的轴,axis=0按照列排序,axis=1按照行排序。
  • kind:排序所用的算法,默认使用快速排序。常用的排序方法还有
    • quicksort:快速排序,速度最快,算法不具有稳定性
    • mergesort:归并排序,优点是具有稳定性,空间复杂度较高,一般外部排序时才会考虑
    • heapsort:堆排序,优点是堆排序在最坏的情况下,其时间复杂度也为O(nlogn),是一个既最高效率又最节省空间的排序方法
  • order:如果包含字段,则表示要排序的字段(比如按照数组中的某个元素项进行排序)

下面通过一个实例来具体了解numpy.sort()函数的用法

假设我们有一组用户信息,包含用户的用户名以及用户的年龄,我们按照用户的年龄来进行排序

dt=np.dtype([('name','S20'),('age','i4')])
a=np.array([('adm','19'),('wan','23'),('ade','23')],dtype=dt)
s=np.sort(a,order='age',kind='quicksort')
print(s)

运行结果:

 [(b'adm', 19) (b'ade', 23) (b'wan', 23)]
Process finished with exit code 0

numpy.argsort()函数

numpy.argsort()函数返回的时从小到大的元素的索引
可以通过以下的实例更好的理解

使用argsort()方法返回索引并重构数组

x=np.array([3,8,11,2,5])
print('返回从小到大的索引')
y=np.argsort(x)
print(y)
print('以索引对原数组排序')
print(x[y])
print('重构原数组')
for i in y:
  print(x[i],end=",")

运行结果:

返回从小到大的索引
[3 0 4 1 2]
以索引对原数组排序
[ 2  3  5  8 11]
重构原数组
2,3,5,8,11,
Process finished with exit code 0

numpy.lexsort()函数

numpy.sort()函数可对于多个序列进行排序,例如我们在比较成绩的时候先比较总成绩,由后列到前列的优先顺序进行比较,这时就用到了lexsort()方法

nm = ('raju','anil','ravi','amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv,nm))
print ('调用 lexsort() 函数:')
print (ind) 
print ('\n')
print ('使用这个索引来获取排序后的数据:')
print ([nm[i] + ", " + dv[i] for i in ind])

运行结果:

使用这个索引来获取排序后的数据:
['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

Process finished with exit code 0

numpy.partition()函数

numpy.partition()叫做分区排序,可以制定一个数来对数组进行分区。

格式如下:

partition(a,kth[,axis,kind,order])

实例:实现将数组中比7小的元素放到前面,比7大的放后面

# partition分区排序
a=np.array([2,3,9,1,0,7,23,13])
print(np.partition(a,7))

运行结果:

[ 0  1  2  3  7  9 13 23]

Process finished with exit code 0

实例:实现将数组中比7小的元素放到前面,比10大的放后面,7-10之间的元素放中间

partition分区排序

a = np.array([2, 3, 9, 1, 6, 5, 0, 12, 10, 7, 23, 13, 27])
print(np.partition(a, (7, 10)))
print(np.partition(a, (2, 7)))

运行结果

[ 1  0  2  3  5  6  7  9 10 12 13 23 27]
[ 0  1  2  6  5  3  7  9 10 12 23 13 27]

Process finished with exit code 0

注意:(7,10)中10的位置,数值不能超过数组长度。

numpy.nonzero()函数

返回输入数组中非零元素的索引

a = np.array([[30,40,0],[0,20,10],[50,0,60]]) 
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 nonzero() 函数:')
print (np.nonzero (a))

运行结果:

我们的数组是:
[[30 40  0]
 [ 0 20 10]
 [50  0 60]]

调用 nonzero() 函数:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))
Process finished with exit code 0

numpy.where()函数

返回满足输入条件的索引

where()函数的使用
b = np.array([2, 1, 3, 0, 4, 7, 23, 13, 27])
y = np.where(b > 10)
print(y)
print('利用索引得到数组中的元素')
print(b[y])

运行结果:

(array([6, 7, 8], dtype=int64),)
利用索引得到数组中的元素
[23 13 27]

Process finished with exit code 0

numpy.extract()函数

numpy.extract()函数实现的是返回自定义条件的元素

# extract()自定义元素筛选
b = np.array([2, 1, 3, 0, 4, 7, 23, 13, 27])
con = np.mod(b, 2) == 0
y = np.extract(con, b)
print(a[y])

运行结果:

[9 2 6]

Process finished with exit code 0

其它排序函数

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。numpy.sort_complex(a)函数实现对复数按照先实部后虚部的顺序进行排序。numpy.argpartition(a, kth[, axis, kind, order])函数实现通过指定关键字沿着指定的轴对数组进行分区。
下面举一个复数排序的例子:

t = np.array([ 1.+2.j, 2.-1.j, 3.-3.j, 3.-2.j, 3.+5.j])
res = np.sort_complex([1 + 2j, 2 - 1j, 3 - 2j, 3 - 3j, 3 + 5j])
print(res)

运行结果:

[1.+2.j 2.-1.j 3.-3.j 3.-2.j 3.+5.j]

Process finished with exit code 0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python3中的2to3转换工具使用示例
Jun 12 Python
Python中将字典转换为列表的方法
Sep 21 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python多进程编程常用方法解析
Mar 26 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 #Python
Python实现随机生成任意数量车牌号
Jan 21 #Python
tensorflow模型继续训练 fineturn实例
Jan 21 #Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 #Python
tensorflow查看ckpt各节点名称实例
Jan 21 #Python
python同义词替换的实现(jieba分词)
Jan 21 #Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 #Python
You might like
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP函数积累总结
2019/03/19 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
纽约海:Sea New York
2018/11/04 全球购物
AJAX的全称是什么
2012/11/06 面试题
项目经理任命书范本
2014/06/05 职场文书
2015年药店工作总结
2015/04/20 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
趣味运动会赞词
2015/07/22 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS