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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
Python写的一个简单监控系统
Jun 19 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 Python
Python字符串格式化输出代码实例
Nov 22 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Python自动发送和收取邮件的方法
Aug 12 Python
python某漫画app逆向
Mar 31 Python
Python数据分析之pandas读取数据
Jun 02 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日期时间函数的高级应用技巧
2009/05/16 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python使用type动态创建类操作示例
2020/02/29 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
Python程序慢的重要原因
2020/09/04 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
2014年最新版离婚协议书范本
2014/11/25 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
会计主管岗位职责
2015/04/02 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers