NumPy三种排序的表现与思考

简介: NumPy排序法自我认为,并不是哪个排序算法速度快,或者稳定性高,就在项目中频繁的进行使用,这个跟我们开发的项目大小和环境也有一定的关系吧,选择合理的排序算法,也是能提高项目性能的。

Numpy库给我们提供了三种数组排序的算法:

  1. 快速排序(Quicksort): 所谓快速排序就是一种就地排序算法。就地是啥意思?就是它不会创建原数组的一个副本,而是和原数组共用数据,直接修改原数组的结构--对标三国演义有些类似司马懿夺取魏国,殿宇啥的都不换,我就换你曹魏的内部,哈哈。
  2. 归并排序(mergesort): 归并排序使用的打法是合并操作对数组进行排序,通常将数组分为两半,分别进行排序,然后将分别排序好的两半再进行合并。这个“典故”相似于赤壁之战的孙刘联军。哎,我们先在一起商议,然后分头行动,最后在汇合共同击退敌人。
  3. 堆排序(heapsort): 堆排序是怎么个情况呢?它是使用堆数据结构来管理无序的数据集,近似于一个二叉树,有最大堆和最小堆。大堆的节点关键字大于或等于小堆的节点关键字。这就好比于三国中的前期,袁绍率领的18路诸侯,他做盟主,下面有18路大军,18路大军下有许许多多的小股势力一样。


以上就形象的介绍下三大排序算法的区别,如有不妥敬请谅解吧!


下面我们就实战一下三种排序在代码中的表现如何。

表现

为了公平起见,我们使用NumPy库给我们提供的sort()函数进行测试,先来看下sort()函数的格式和所需参数。


格式:numpy.sort(a, axis, kind, order)


参数:a:需要排序的数组;axis:数组的轴;kind: 排序算法;order:排序的字段


我们主要是测试kind参数,其他参数暂时不使用。

第一项:速度

1716617872216.jpg

经过测试,在速度方面,快速排序(39毫秒) 、 归并排序(54毫秒) 、 堆排序(76秒)。

第二项:稳定性

稳定性方面是这么进行定义的,我们可以使用numpy库给我们提供的argsort函数来进行排序算法的稳定性,argsort函数函数返回的是元素排序后的索引值,如果原数组之前的排序的索引不变,那么说明排序算法是稳定的。我们根据稳定性的定义一个个的进行测试一下。

1716617902960.jpg

经过测试以后,这三种排序怎么都是不稳定的呢?然后去翻了翻文档,但是文档中提供的是:


quicksort:不稳定;mergesort:稳定;heapsort:不稳定。


这边也有函数调用的说明,截图给大家看一下。

1716617925467.jpg

这个地方我也是没有想明白😓😵,但是还是得写出来,我相信掘友的力量是无穷的会帮我解决。

思考

NumPy排序法自我认为,并不是哪个排序算法速度快,或者稳定性高,就在项目中频繁的进行使用,这个跟我们开发的项目大小和环境也有一定的关系吧,选择合理的排序算法,也是能提高项目性能的。


还有就是在以后的新知识学习的时候,我感觉一定要动手去做,才会发现意想不到的结果吧。

相关文章
|
7月前
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
398 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 8
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序,各有不同的速度、最坏情况性能、工作空间和稳定性特点。此外,NumPy还提供了`numpy.extract()`函数,可以根据特定条件从数组中抽取元素。例如,在一个3x3数组中,通过定义条件选择偶数元素,并使用该函数提取这些元素。示例输出为:[0., 2., 4., 6., 8.]。
31 8
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 5
NumPy中的排序方法及特性对比,包括快速排序、归并排序与堆排序的速度、最坏情况性能、工作空间及稳定性分析。并通过`numpy.argmax()`与`numpy.argmin()`函数演示了如何获取数组中最大值和最小值的索引,涵盖不同轴方向的操作,并提供了具体实例与输出结果,便于理解与实践。
28 5
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 2
介绍NumPy` 中的排序方法与条件筛选函数。通过对比快速排序、归并排序及堆排序的速度、最坏情况性能、工作空间需求和稳定性,帮助读者选择合适的排序算法。此外,还深入讲解了 `numpy.argsort()` 的使用方法,并通过具体实例展示了如何利用该函数获取数组值从小到大的索引值,并据此重构原数组,使得其变为有序状态。对于学习 `NumPy` 排序功能来说,本教程提供了清晰且实用的指导。
40 7
|
4月前
|
索引 Python
Numpy进阶之排序小技巧
Numpy进阶之排序小技巧
|
3月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 4
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序等,具有不同的执行速度、最坏情况性能、工作空间需求及稳定性特征。教程涵盖了`msort`、`sort_complex`、`partition`和`argpartition`等函数的使用方法,并通过实例展示了复数排序与分区排序的应用。例如,`np.sort_complex()`用于复数排序,`np.partition()`实现基于指定位置的分区排序,而`argpartition()`则帮助快速找到数组中的特定值。
15 0
|
7月前
|
搜索推荐 数据挖掘 数据处理
NumPy数组统计与排序方法全览
【4月更文挑战第17天】本文介绍了NumPy在Python中的数组统计和排序功能。主要包括计算平均值、标准差和方差的`np.mean()`, `np.std()`, `np.var()`方法,以及求最大值、最小值、百分位数的功能。在排序方面,讲解了基本排序的`np.sort()`,获取排序索引的`np.argsort()`,逆序排序和随机排序的方法。这些工具对于数据分析和科学计算十分实用,能有效提升数据处理效率。
|
IDE 搜索推荐 开发工具
Python 教程之 Numpy(11)—— 排序、搜索和计数
Python 教程之 Numpy(11)—— 排序、搜索和计数
59 0
|
SQL 索引 Python
【NumPy 数组连接、拆分、搜索、排序】
【NumPy 数组连接、拆分、搜索、排序】
|
存储 数据可视化 数据挖掘
【Numpy】数组的创建和常用函数(排序、连接、属性、reshape、索引和切片)
【Numpy】数组的创建和常用函数(排序、连接、属性、reshape、索引和切片)
204 0
【Numpy】数组的创建和常用函数(排序、连接、属性、reshape、索引和切片)