NumPy 排序、查找、计数
章节
NumPy中提供了各种排序相关的函数。这些排序函数实现了不同的排序算法,每个算法的特点是执行速度、最坏情况性能、所需的工作空间和算法的稳定性。下表为三种排序算法的比较。
| 种类 | 速度 | 最差情况 | 工作区 | 稳定性 |
|---|---|---|---|---|
| ‘quicksort’ | 1 | O(n^2) | 0 | no |
| ‘mergesort’ | 2 | O(n*log(n)) | ~n/2 | yes |
| ‘heapsort’ | 3 | O(n*log(n)) | 0 | no |
numpy.sort()
sort()对数组进行排序,返回排好序的数组副本。可以指定轴方向。
函数语法:
numpy.sort(a, axis, kind, order)
参数
- a 待排序数组
- axis 指定排序的轴。如果没有,按最后一个轴排序。
- kind 默认是‘quicksort’
- order 指定排序字段
示例
import numpy as np
a = np.array([[3,7],[9,1]])
print ('数组:' )
print (a)
print ('\n')
print ('排序:' )
print (np.sort(a))
print ('\n')
print ('轴 0 排序:')
print (np.sort(a, axis = 0))
print ('\n')
# 排序函数中的顺序参数
dt = np.dtype([('name', 'S10'),('age', int)])
a = np.array([("kevin", 21),("peter",25),("tony", 17), ("mike",27)], dtype = dt)
print ('数组:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order = 'name'))
输出
数组:
[[3 7]
[9 1]]
排序:
[[3 7]
[1 9]]
轴 0 排序:
[[3 1]
[9 7]]
数组:
[(b'kevin', 21) (b'peter', 25) (b'tony', 17) (b'mike', 27)]
按 name 排序:
[(b'kevin', 21) (b'mike', 27) (b'peter', 25) (b'tony', 17)]
numpy.argsort()
该函数先对数组进行排序,然后提取排序后的数组索引,以数组形式返回,原数组不会被修改,通过索引可以得到排序结果。
示例
import numpy as np
x = np.array([3, 1, 2])
print ('数组x:')
print (x)
print ('\n')
print ('将argsort()应用于x:')
y = np.argsort(x)
print (y)
print ('\n')
print ('按排序顺序重建原始数组:' )
print (x[y])
print ('\n')
print ('使用循环重构原始数组:')
for i in y:
print (x[i])
输出
数组x:
[3 1 2]
将argsort()应用于x:
[1 2 0]
按排序顺序重建原始数组:
[1 2 3]
使用循环重构原始数组:
1
2
3
numpy.lexsort()
用于对多个序列进行排序,类似于SQL中的ORDERBY多个字段:ORDER BY 字段1, 字段2, 字段3。可以想象成对电子表格进行排序,每一列代表一个序列,越后面的列优先级越高。
原数组不会被修改,该函数提取排序后的数组索引,以数组形式返回,通过索引可以得到排序结果。
示例
import numpy as np
a = np.array(['a','b','c','d','e'])
b = np.array([12, 90, 380, 12, 211])
ind = np.lexsort((a,b))
print("打印排序后的数组索引:")
print(ind)
print("使用索引对数组排序:")
for i in ind:
print(a[i],b[i])
输出
打印排序后的数组索引:
[0 3 1 4 2]
使用索引对数组排序:
a 12
d 12
b 90
e 211
c 380
numpy.argmax() 与 numpy.argmin()
这两个函数分别返回指定轴上,最大和最小元素的索引。
示例
import numpy as np
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print ('数组:')
print (a)
print ('\n')
print ('应用argmax()函数:')
print (np.argmax(a, 0))
print ('\n')
print ('应用argmin()函数:')
print (np.argmin(a, 0) )
print ('\n')
输出
数组:
[[30 40 70]
[80 20 10]
[50 90 60]]
应用argmax()函数:
[1 2 0]
应用argmin()函数:
[0 1 1]
numpy.nonzero()
该函数返回数组中非零元素的索引。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print("打印原始数组\n", b)
print ('\n')
print("打印非零元素的位置")
print(b.nonzero())
输出
打印原始数组
[ 12 90 380 12 211]
打印非零元素的位置
(array([0, 1, 2, 3, 4]),)
numpy.where()
该函数查找数组中符合条件的元素,返回其索引。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print(np.where(b>12))
c = np.array([[20, 24],[21, 23]])
print(np.where(c>20))
输出
(array([0, 1, 1]), array([1, 0, 1]))
numpy.extract()
该函数返回数组中符合条件的元素。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print(np.extract(b>12, b))
c = np.array([[20, 24],[21, 23]])
print(np.extract(c>20, c))
输出
[ 90 380 211]
[24 21 23]
NumPy 排序、查找、计数的更多相关文章
- Sublime文本排序&查找重复行&删除重复行
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
- 排序算法的C语言实现(下 线性时间排序:计数排序与基数排序)
计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为 ...
- NumPy 排序、条件刷选函数
NumPy 排序.条件刷选函数 NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法 ...
- 桶排序和计数排序的理解实现和比较(Java)
比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...
- NumPy排序、搜索和计数函数
NumPy - 排序.搜索和计数函数 NumPy中提供了各种排序相关功能. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种 ...
- JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- Java排序之计数排序
Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...
- 使用 js 实现十大排序算法: 计数排序
使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
随机推荐
- Kafka源码系列之源码分析zookeeper在kafka的作用
浪尖的kafka源码系列以kafka0.8.2.2源码为例给大家进行讲解的.纯属个人爱好,希望大家对不足之处批评指正. 一,zookeeper在分布式集群的作用 1,数据发布与订阅(配置中心) 发布与 ...
- 初学JQuery
JQuery是对JavaScript的封装,简化了JS代码,是主流框架的基础(VUE,EasyUI,Bootstrap) 它是2006年推出的 JQuery的优势:体积小,压缩后只有100KB左右强大 ...
- 新闻网大数据实时分析可视化系统项目——6、HBase分布式集群部署与设计
HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtable 的开源实现,与 ...
- JDBC--Statement使用
1.通过Statement实现类执行更新操作(INSERT.UPDATE .DELETE): --1)获取数据库连接Connection的对象: --2)通过Connection类的createSta ...
- python学习笔记(三)---高级特性
一.切片 取无数多个list元素 不用一个个取得笨方法就用切片 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作. 对应上面的问题, ...
- android 根据res文件夹下(如res/raw)文件名获取其id
android 根据res文件夹下(如res/raw)文件名获取其id //测试是否能够获取其资源ID int treeId = mv.getResources().getIdentifier(fil ...
- 08 SSM整合案例(企业权限管理系统):07.订单操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...
- JAVA开源爬虫列表及简介
本文列举了一些较为常用的JAVA开源爬虫框架: 1.Apache Nutch 官方网站:http://nutch.apache.org/ 是否支持分布式:是 可扩展性:中.Apache Nutch并不 ...
- POJ1471 Tree/洛谷P4178 Tree
Tree P4178 Tree 点分治板子. 点分治就是直接找树的重心进行暴力计算,每次树的深度不会超过子树深度的\(\frac{1}{2}\),计算完就消除影响,找下一个重心. 所以伪代码: voi ...
- 洛谷P2296 寻找道路
\(\Large\textbf{Description:} \large {在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:}\) \ ...