zoukankan      html  css  js  c++  java
  • 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 ('
    ')
    
    print ('排序:' )
    print (np.sort(a)) 
    print ('
    ') 
    
    print ('轴 0 排序:') 
    print (np.sort(a, axis = 0)) 
    print ('
    ')  
    
    # 排序函数中的顺序参数
    dt = np.dtype([('name', 'S10'),('age', int)]) 
    a = np.array([("kevin", 21),("peter",25),("tony", 17), ("mike",27)], dtype = dt) 
    
    print ('数组:') 
    print (a) 
    print ('
    ')  
    
    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 ('
    ')  
    
    print ('将argsort()应用于x:') 
    y = np.argsort(x) 
    print (y) 
    print ('
    ')  
    
    print ('按排序顺序重建原始数组:' )
    print (x[y]) 
    print ('
    ')  
    
    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 ('
    ') 
    
    print ('应用argmax()函数:') 
    print (np.argmax(a, 0)) 
    print ('
    ')  
    
    print ('应用argmin()函数:') 
    print (np.argmin(a, 0) ) 
    print ('
    ')  

    输出

     数组:
    [[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("打印原始数组
    ", b)  
    print ('
    ') 
    
    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]
  • 相关阅读:
    mybatis2入门程序
    mybatis1
    mybeats与jdbc问题分析
    mysqljdbc简单连接释放
    jdbc问题记录
    section,article,div
    HB调试前端开发移动
    HTML,XML,XHTML
    访问地图
    OAuth
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/13162029.html
Copyright © 2011-2022 走看看