【numpy基础】--数组排序

这篇具有很好参考价值的文章主要介绍了【numpy基础】--数组排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

numpy 数组通常是用于数值计算的多维数组,而排序功能可以快速、准确地对数据进行排序,从而得到更加清晰、易于分析的结果。

在数据分析和处理过程中,常常需要对数据进行排序,以便更好地理解和发现其中的规律和趋势。

排序会应用在很多场景中,比如:

  1. 数据分类:将数据按照一定的特征进行分类,可以通过 numpy 数组排序来实现。
  2. 数据筛选:通过 numpy 数组排序,可以快速地筛选出符合特定条件的数据。
  3. 数据合并:多个 numpy 数组可以通过 numpy 数组排序来进行合并,从而得到一个更加完整、准确的数据集。

1. 排序算法

1.1. sort 函数

numpy中常用排序算法都是封装好的,通过 sort函数,可以直接使用常用的排序算法。

import numpy as np

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[44 11 36  0 83 90 54 40 36 34]

arr.sort(kind='quicksort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='mergesort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='heapsort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='stable')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

四种排序算法分别是:

  1. quicksort:快速排序
  2. mergesort:归并排序
  3. heapsort:堆排序
  4. stable:冒泡排序

上述排序的结果都一样,quicksort 是默认的排序算法,也是效率最高的算法。

1.2. argsort 函数

除了 sort 函数,还有一个比较常用的是 argsort,它返回的是排序之后的索引。

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[71 59 96 30 71 24 22 60 99 94]

print(arr.argsort())
#运行结果
[6 5 3 1 7 0 4 9 2 8]

argsort 的结果是排序之后的原数组的下标。
比如第一个值 6 表示的是 arr[6],也就是 22

2. 行列排序

当数组是多维的时候,可以按照每个维度来排序。
比如二维数组:

arr = np.random.randint(0, 100, (3, 3))
print(arr)
#运行结果
[[14 18  6]
 [80 85 14]
 [95 24 82]]

arr.sort(axis=0)
print(arr)
#运行结果
[[14 18  6]
 [80 24 14]
 [95 85 82]]

axis=0跨行的意思,也就是按列对数据进行排序。

arr = np.random.randint(0, 100, (3, 3))
print(arr)
#运行结果
[[ 2 22 17]
 [85  6 20]
 [98 97 39]]

arr.sort(axis=1)
print(arr)
#运行结果
[[ 2 17 22]
 [ 6 20 85]
 [39 97 98]]

axis=1跨列的意思,也就是按行对数据进行排序。

注意:这种排序的方式会破坏原有元素之间的行列关系。

3. 部分排序

nunpy的数组还支持部分排序,也就是只针对数组的特定部分排序,不用对整个数组排序。

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[13 94 71  6 47 81 99 12 49 20]

arr.partition(3)
print(arr)
#运行结果
[ 6 13 12 20 94 81 99 71 49 47]

partition(3)表示的把最小的三个数字放在数组前三个,后面的元素就是原先剩下的元素,顺序不管。
放在最前面的三个数是所有元素中最小的三个数,它们的顺序也是不保证的。

多维数组也可以部分排序:

arr = np.random.randint(0, 100, (5, 5))
print(arr)
#运行结果
[[11  8 84 34 99]
 [24 18 69 79 41]
 [ 2 25 91 91 64]
 [64  8 48 86 49]
 [68 62 51 22 85]]

arr.partition(3, axis=0)
print(arr)
#运行结果
[[ 2  8 48 22 49]
 [11  8 51 34 64]
 [24 18 69 79 41]
 [64 25 84 86 85]
 [68 62 91 91 99]]

partition之后,数组的前三行元素就是每列最小的三个数。

arr = np.random.randint(0, 100, (5, 5))
print(arr)
#运行结果
[[76 79 72 91 98]
 [13 58 53 76 63]
 [57 98 16 81 39]
 [48 43 63 98 77]
 [33 71 54 74 68]]

arr.partition(3, axis=1)
print(arr)
#运行结果
[[72 76 79 91 98]
 [13 53 58 63 76]
 [16 39 57 81 98]
 [43 48 63 77 98]
 [33 54 68 71 74]]

partition之后,数组的前三列元素就是每行最小的三个数。

4. 总结回顾

numpy 数组排序提供了一种快速、灵活、可靠的排序方式,可以满足各种排序需求。
numpy的排序针对数组做了更多的优化,排序效率比python内置的排序算法更高。文章来源地址https://www.toymoban.com/news/detail-515737.html

到了这里,关于【numpy基础】--数组排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Numpy入门基础(一)创建数组

    1- np.array() 参数众多,初学时只要关注基本用法。 元组、列表转换 内置函数 range() 数组副本copy,开辟一块新内存复制原数组 主要参数: dtype=     数组元素的数据类型,可选 copy=      对象是否需要复制,可选 order=     创建数组的样式,C为行方向,F为列方向,A为任意方

    2024年02月14日
    浏览(44)
  • Python Numpy入门基础(二)数组操作

    NumPy是Python中一个重要的数学运算库,它提供了了一组多维数组对象和一组用于操作这些数组的函数。以下是一些NumPy的主要特点: 多维数组对象:NumPy的核心是ndarray对象,它是一个多维数组对象,可以容纳任意数据类型。 矢量化操作:使用NumPy的函数,可以对整个数组进行

    2024年02月15日
    浏览(44)
  • Vue3 中引入液晶数字字体(通常用于大屏设计)

    下载液晶字体 DS-Digital.ttf ‼️注意:本项目使用的是 vue-cli 搭建的基础框架, webpack.base.conf.js 配置文件中已经配置好了,直接如上步骤使用即可,若是其他框架则需要检查一下 webpack.base.conf.js 配置文件中以下配置是否包括 ttf 格式。

    2024年02月11日
    浏览(37)
  • 【Python 零基础入门】Numpy 常用函数 数组操作 & 数学运算

    Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数. np.assarray 可以将输入转换为

    2024年02月05日
    浏览(46)
  • Java基础 |数组排序

    所有知识点均来源于《Java从入门到精通》(第六版)。 他排序数组的过程中总将较小的数往前排,较大的数往后放,类似水中气泡往上升的动作,所以叫冒泡排序。 基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移

    2024年01月25日
    浏览(40)
  • Java---第四章(数组基础,冒泡排序,二分查找,多维数组)

    概念: 数组是编程语言中的一种常见的数据结构,能够存储一组相同类型的数据 作用: 存储一组相同类型的数据,方便进行数理统计(求最大值,最小值,平均值以及总和),也可以进行信息的展示 定义: 第一种: 只能在定义数组同时赋值时使用 第二种: 可以在定义数组

    2024年02月09日
    浏览(49)
  • 在 QML 中,ComboBox 是一种常用的用户界面控件,通常用于提供一个下拉式的选择框,允许用户从预定义的选项列表中选择一个值

    ComboBox 详解: 以下是 ComboBox 的一些重要属性和特性: model : 用于指定 ComboBox 中的选项列表,可以是一个数组、列表、模型或者其他可迭代的数据结构。 editable : 用于指定是否允许用户编辑 ComboBox 中的文本输入框,以便输入非预定义的选项。 currentIndex : 用于获取或设置当前

    2024年04月15日
    浏览(42)
  • NumPy和Pandas库的基本用法,用于数据处理和分析

    当涉及到数据处理和分析时,NumPy和Pandas是两个非常常用的Python库。下面是它们的基本用法: NumPy(Numerical Python): 导入NumPy库:在代码中使用import numpy as np导入NumPy库。 创建NumPy数组:使用np.array()函数可以创建一个NumPy数组。例如,arr = np.array([1, 2, 3, 4, 5])创建一个包含整数

    2024年02月11日
    浏览(42)
  • 【Java基础教程】(八)面向对象篇 · 第二讲:Java 数组全面解析——动态与静态初始化、二维数组、方法参数传递、排序与转置、对象数组、操作API~

    掌握数组的动态及静态创建方式、使用及特征; 掌握引用类型数据的特征; 掌握数组的排序、转置操作; 数组可以将多个变量进行统一的命名,这样相同类型的元素就可以按照一定的顺序进行组合排列 。在 Java中,数组属于引用类型数据,所以在数组的操作过程中,也一定

    2024年02月13日
    浏览(50)
  • Numpy-改变数组维度_数组的拼接

    处理数组的一项重要工 作就是改变数组的维度,包含提高数组的维度和降低数组的维度,还包括数组的转置Numpy 提供的大量API可以很轻松地完成这些数组的操作。 例如,通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。 通过 ravel 方法或 flatten 方法可以将多维数

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包