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()对数组进行排序,返回排好序的数组副本。可以指定轴方向。

函数语法:

  1. numpy.sort(a, axis, kind, order)

参数

  • a 待排序数组
  • axis 指定排序的轴。如果没有,按最后一个轴排序。
  • kind 默认是‘quicksort’
  • order 指定排序字段

示例

  1. import numpy as np
  2. a = np.array([[3,7],[9,1]])
  3. print ('数组:' )
  4. print (a)
  5. print ('\n')
  6. print ('排序:' )
  7. print (np.sort(a))
  8. print ('\n')
  9. print ('轴 0 排序:')
  10. print (np.sort(a, axis = 0))
  11. print ('\n')
  12. # 排序函数中的顺序参数
  13. dt = np.dtype([('name', 'S10'),('age', int)])
  14. a = np.array([("kevin", 21),("peter",25),("tony", 17), ("mike",27)], dtype = dt)
  15. print ('数组:')
  16. print (a)
  17. print ('\n')
  18. print ('按 name 排序:')
  19. print (np.sort(a, order = 'name'))

输出

  1. 数组:
  2. [[3 7]
  3. [9 1]]
  4. 排序:
  5. [[3 7]
  6. [1 9]]
  7. 0 排序:
  8. [[3 1]
  9. [9 7]]
  10. 数组:
  11. [(b'kevin', 21) (b'peter', 25) (b'tony', 17) (b'mike', 27)]
  12. name 排序:
  13. [(b'kevin', 21) (b'mike', 27) (b'peter', 25) (b'tony', 17)]

numpy.argsort()

该函数先对数组进行排序,然后提取排序后的数组索引,以数组形式返回,原数组不会被修改,通过索引可以得到排序结果。

示例

  1. import numpy as np
  2. x = np.array([3, 1, 2])
  3. print ('数组x:')
  4. print (x)
  5. print ('\n')
  6. print ('将argsort()应用于x:')
  7. y = np.argsort(x)
  8. print (y)
  9. print ('\n')
  10. print ('按排序顺序重建原始数组:' )
  11. print (x[y])
  12. print ('\n')
  13. print ('使用循环重构原始数组:')
  14. for i in y:
  15. print (x[i])

输出

  1. 数组x:
  2. [3 1 2]
  3. argsort()应用于x:
  4. [1 2 0]
  5. 按排序顺序重建原始数组:
  6. [1 2 3]
  7. 使用循环重构原始数组:
  8. 1
  9. 2
  10. 3

numpy.lexsort()

用于对多个序列进行排序,类似于SQL中的ORDERBY多个字段:ORDER BY 字段1, 字段2, 字段3。可以想象成对电子表格进行排序,每一列代表一个序列,越后面的列优先级越高。

原数组不会被修改,该函数提取排序后的数组索引,以数组形式返回,通过索引可以得到排序结果。

示例

  1. import numpy as np
  2. a = np.array(['a','b','c','d','e'])
  3. b = np.array([12, 90, 380, 12, 211])
  4. ind = np.lexsort((a,b))
  5. print("打印排序后的数组索引:")
  6. print(ind)
  7. print("使用索引对数组排序:")
  8. for i in ind:
  9. print(a[i],b[i])

输出

  1. 打印排序后的数组索引:
  2. [0 3 1 4 2]
  3. 使用索引对数组排序:
  4. a 12
  5. d 12
  6. b 90
  7. e 211
  8. c 380

numpy.argmax() 与 numpy.argmin()

这两个函数分别返回指定轴上,最大和最小元素的索引。

示例

  1. import numpy as np
  2. a = np.array([[30,40,70],[80,20,10],[50,90,60]])
  3. print ('数组:')
  4. print (a)
  5. print ('\n')
  6. print ('应用argmax()函数:')
  7. print (np.argmax(a, 0))
  8. print ('\n')
  9. print ('应用argmin()函数:')
  10. print (np.argmin(a, 0) )
  11. print ('\n')

输出

  1. 数组:
  2. [[30 40 70]
  3. [80 20 10]
  4. [50 90 60]]
  5. 应用argmax()函数:
  6. [1 2 0]
  7. 应用argmin()函数:
  8. [0 1 1]

numpy.nonzero()

该函数返回数组中非零元素的索引。

示例

  1. import numpy as np
  2. b = np.array([12, 90, 380, 12, 211])
  3. print("打印原始数组\n", b)
  4. print ('\n')
  5. print("打印非零元素的位置")
  6. print(b.nonzero())

输出

  1. 打印原始数组
  2. [ 12 90 380 12 211]
  3. 打印非零元素的位置
  4. (array([0, 1, 2, 3, 4]),)

numpy.where()

该函数查找数组中符合条件的元素,返回其索引。

示例

  1. import numpy as np
  2. b = np.array([12, 90, 380, 12, 211])
  3. print(np.where(b>12))
  4. c = np.array([[20, 24],[21, 23]])
  5. print(np.where(c>20))

输出

  1. (array([0, 1, 1]), array([1, 0, 1]))

numpy.extract()

该函数返回数组中符合条件的元素。

示例

  1. import numpy as np
  2. b = np.array([12, 90, 380, 12, 211])
  3. print(np.extract(b>12, b))
  4. c = np.array([[20, 24],[21, 23]])
  5. print(np.extract(c>20, c))

输出

  1. [ 90 380 211]
  2. [24 21 23]

NumPy 排序、查找、计数的更多相关文章

  1. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  2. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  3. 排序算法的C语言实现(下 线性时间排序:计数排序与基数排序)

    计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为 ...

  4. NumPy 排序、条件刷选函数

    NumPy 排序.条件刷选函数 NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法 ...

  5. 桶排序和计数排序的理解实现和比较(Java)

    比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...

  6. NumPy排序、搜索和计数函数

    NumPy - 排序.搜索和计数函数 NumPy中提供了各种排序相关功能. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种 ...

  7. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  8. Java排序之计数排序

    Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...

  9. 使用 js 实现十大排序算法: 计数排序

    使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

随机推荐

  1. java并发:初探消费者和生产者模式

    消费者和生产者模式 用继承Thread方式,用wait和notifyAll方法实现. 消费者和生产者模式的特点 1. 什么时候生产:仓库没有满的时候,生产者这可以生产,消费者也可以消费,仓库满的时候停 ...

  2. RabbitMq学习笔记——MingW编译RabbitMQ C

    1.安装cmak,下载地址:https://cmake.org/download/,当前最新版本3.15.1,下载cmake-3.15.1-win64-x64.msi 注意:安装时勾选将bin目录添加 ...

  3. Linux CentOS7 VMware linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理

    一. linux和windows互传文件 X-shell.Securecrt远程终端,与Windows之间互传文件. 安装一个工具lrzsz [root@davery ~]# yum install ...

  4. hibernate中简单的增删改查

    项目的整体结构如下 1.配置文件 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hi ...

  5. centos7-django(python3)环境搭建

    最小化安装centos7 安装epel-release 安装python34 安装pip3 通过pip3安装django 坑 epel(extra package for enterprise lin ...

  6. 如何让图片在div里左右居中,上下居中

    如何让图片在div里左右居中,上下居中 转载▼   1.要想让图片左右对齐,我们可以在div里写入"style:text-align:center;"代码来实现. 2.要想使图片居 ...

  7. 1. GC标记-清除算法(Mark Sweep GC)

    世界上第一个GC算法,由 JohnMcCarthy 在1960年发布. 标记-清除算法由标记阶段和清除阶段构成. 标记阶段就是把所有的活动对象都做上标记的阶段. 标记阶段就是"遍历对象并标记 ...

  8. Spring框架中的JDK与CGLib动态代理

    JDK和CGLib动态代理区别 JDK动态代理:利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类, 在调用具体方法前调用InvokeHandler ...

  9. 吴裕雄--天生自然JAVA数据库编程:JDBC操作步骤及数据库连接操作

    public class ConnectionDemo01{ // 定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gj ...

  10. CodeForces - 862C Mahmoud and Ehab and the xor(构造)

    题意:要求构造一个n个数的序列,要求n个数互不相同,且异或结果为x. 分析: 1.因为0 ^ 1 ^ 2 ^ 3 ^ ... ^ (n - 3) ^ (n - 2) ^ (0 ^ 1 ^ 2 ^ 3 ...