首页 > 其他分享 >【numpy基础】--数组排序

【numpy基础】--数组排序

时间:2023-07-03 12:24:24浏览次数:32  
标签:arr -- 36 数组 print 排序 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内置的排序算法更高。

标签:arr,--,36,数组,print,排序,numpy
From: https://www.cnblogs.com/wang_yb/p/17522409.html

相关文章

  • create-vue 创建vue项目
    1.前提环境已经安装16.0或者更高版本的node.js2.创建一个vue项目npminitvue@latest//将会安装并且执行create-vue 注意:npmrundev......
  • Unity3D高级编程主程手记 学习笔记四:用户界面
     用户界面(UI)是游戏项目中重要的组成部分。面对一个从零开始的项目,首先要选择选用哪个UI系统作为主框架。主流公司里最常用的UI系统有:NGUI,UGUI,除此之外还有部分公司使用FairyGUI,DoozyUI。UGUI的运行原理UGUI是在3D网格下构建起来的UI系统,它的每一个可显示元素都是通过3D......
  • 细节决定成败,聊聊JS的类型(上)
    今天我们来讲讲JavaScript的内容,在这个部分,我首先想跟你聊一聊类型。JavaScript类型对每个前端程序员来说,几乎都是最为熟悉的概念了。但是你真的很了解它们吗?我们不妨来看看下面的几个问题。为什么有的编程规范要求用void0代替undefined?字符串有最大长度吗?0.1+0.2......
  • Servlet p5 Cookie对象
    Cookie对象Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但是由于Cook是服务器端保存在客户端的信息,所以其安全性也是很差的。例如常见......
  • input框限制输入内容
    <inputv-model="request.idCardNo"maxlength="18"@input="typeInput($event)"placeholder="请输入您的身份证号">对应在methods中的方法 typeInput(event){ //只能输入数字和字母的验证; constinputType=/[\W]/g//想限制什么类型在这里换换正......
  • 【转】python踩坑(FileNotFoundError: Could not find module '此处省略了一些路径win_
    1、报错(FileNotFoundError:Couldnotfindmodule'此处省略了一些路径\site-packages\scipy\.libs\libbanded5x.GL5FZ7Y77HIKQFNMZKUOMV5GID6YMX2V.gfortran-win_amd64.dll'(oroneofitsdependencies).Tryusingthefullpathwithconstructorsyntax.) 2、分析&a......
  • 开发中MongoDB遇到的各种问题
    目录一、安装6版本以下二、安装6版本及以上三、安装6版本以下(解压版)四、配置本地WindowsMongoGB服务五、navicat连接远程mongodb数据库六、ip不一致问题一、安装6版本以下安装MongoDB6版本以下的可以参考以下博主->自动安装版(26条消息)MongoDB安装(超详细)_AIbro的博客-C......
  • 2023.7.3
    学习java中的类面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位类与对象的关系类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)面向对象......
  • SQL
    增insertintotable(字段名1,字段2)values(值1,值2);改update表名set字段1=值1,字段2=值2【where条件】;删deletefrom表名[where条件];查select字段from表名where条件列表groupby分组字段列表having分组后的条件列表orderby排序字段列表limit分页参数去除重复记录select......
  • 19C-19.16 ORA-17503 ORA-27300 ORA-27301 ORA-27302
    ***alter日志告警2023-07-01T02:05:13.474592+08:00Errorsinfile/u01/app/oracle/diag/rdbms/dg/dg1/trace/dg1_ora_17925.trc:ORA-17503:ksfdopn:2Failedtoopenfile+DATA/dg/PASSWORD/pwddgORA-27300:OSsystemdependentoperation:openfailedwithstatus:13ORA-......