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实现探测socket和web服务示例
Mar 28 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
python读出当前时间精度到秒的代码
Jul 05 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python实现实时视频流播放代码实例
Jan 11 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python列表推导式实现代码实例
Sep 09 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
Python如何telnet到网络设备
Feb 18 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
浅谈Fetch 数据交互方式
2018/12/20 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
Python中获取网页状态码的两个方法
2014/11/03 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python如何爬取个性签名
2018/06/19 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python 异步async库的使用说明
2020/05/04 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
高中数学教师求职信
2013/10/30 职场文书
团支部推优材料
2014/05/21 职场文书
交通志愿者活动总结
2014/06/27 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
总结会主持词
2015/07/02 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技