欢迎这位怪蜀黍来到《Python机器学习(四十七)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]

 

 posted on   大码王  阅读(473)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

成都

复制代码

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示

目录导航