• NumPy总结


    NumPy 排序、条件刷选函数

    NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。

    种类速度最坏情况工作空间稳定性
    ‘quicksort’(快速排序)1O(n^2)0
    ‘mergesort’ (归并排序)2O(n*log(n))~n/2
    ‘heapsort’(堆排序)3O(n*log(n))0

    numpy.sort()
    numpy.sort() 函数返回输入数组的排序副本。函数格式如下:
    numpy.sort(a, axis, kind, order)
    参数说明:

    • a: 要排序的数组
    • axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排
      序,axis=1 按行排序
    • kind: 默认为’quicksort’(快速排序)
    • order: 如果数组包含字段,则是要排序的字段
    import numpy as np  
     
    a = np.array([[3,7],[9,1]])  
    print ('我们的数组是:')
    print (a)
    print ('
    ')
    print ('调用 sort() 函数:')
    print (np.sort(a))
    print ('
    ')
    print ('按列排序:')
    print (np.sort(a, axis =  0))
    print ('
    ')
    # 在 sort 函数中排序字段 
    dt = np.dtype([('name',  'S10'),('age',  int)]) 
    a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)  
    print ('我们的数组是:')
    print (a)
    print ('
    ')
    print ('按 name 排序:')
    print (np.sort(a, order =  'name'))

    输出结果为:

    我们的数组是:
    [[3 7]
     [9 1]]
    
    
    调用 sort() 函数:
    [[3 7]
     [1 9]]
    
    
    按列排序:
    [[3 1]
     [9 7]]
    
    
    我们的数组是:
    [(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)]
    
    
    按 name 排序:
    [(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]

    numpy.argsort()
    numpy.argsort() 函数返回的是数组值从小到大的索引值。

    import numpy as np 
     
    x = np.array([3,  1,  2])  
    print ('我们的数组是:')
    print (x)
    print ('
    ')
    print ('对 x 调用 argsort() 函数:')
    y = np.argsort(x)  
    print (y)
    print ('
    ')
    print ('以排序后的顺序重构原数组:')
    print (x[y])
    print ('
    ')
    print ('使用循环重构原数组:')
    for i in y:  
        print (x[i], end=" ")

    输出结果为:

    我们的数组是:
    [3 1 2]
    
    
    对 x 调用 argsort() 函数:
    [1 2 0]
    
    
    以排序后的顺序重构原数组:
    [1 2 3]
    
    
    使用循环重构原数组
    
    1 2 3

    numpy.lexsort()
    numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。
    这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。

    import numpy as np 
     
    nm =  ('raju','anil','ravi','amar') 
    dv =  ('f.y.',  's.y.',  's.y.',  'f.y.') 
    ind = np.lexsort((dv,nm))  
    print ('调用 lexsort() 函数:') 
    print (ind) 
    print ('
    ') 
    print ('使用这个索引来获取排序后的数据:') 
    print ([nm[i]  +  ", "  + dv[i]  for i in ind])

    输出结果为:

    调用 lexsort() 函数:
    [3 1 0 2]
    
    
    使用这个索引来获取排序后的数据:
    ['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

    msort、sort_complex、partition、argpartition

    函数描述
    msort(a)数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。
    sort_complex(a)对复数按照先实部后虚部的顺序进行排序。
    partition(a, kth[, axis, kind, order])指定一个数,对数组进行分区
    argpartition(a, kth[, axis, kind, order])可以通过关键字 kind 指定算法沿着指定轴对数组进行分区

    numpy.argmax() 和 numpy.argmin()
    numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。
    umpy.nonzero()
    numpy.nonzero() 函数返回输入数组中非零元素的索引。
    numpy.where()
    numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
    numpy.extract()
    numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

    NumPy 字节交换

    在几乎所有的机器上,多字节对象都被存储为连续的字节序列。字节顺序,是跨越多字节的程序对象的存储规则。
    大端模式:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
    小端模式:指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
    例如在 C 语言中,一个类型为 int 的变量 x 地址为 0x100,那么其对应地址表达式&x的值为 0x100。且x的四个字节将被存储在存储器的 0x100, 0x101, 0x102, 0x103位置。

    numpy.ndarray.byteswap()
    numpy.ndarray.byteswap() 函数将 ndarray 中每个元素中的字节进行大小端转换。

    import numpy as np 
     
    a = np.array([1,  256,  8755], dtype = np.int16)  
    print ('我们的数组是:')
    print (a)
    print ('以十六进制表示内存中的数据:')
    print (map(hex,a))
    # byteswap() 函数通过传入 true 来原地交换 
    print ('调用 byteswap() 函数:')
    print (a.byteswap(True))
    print ('十六进制形式:')
    print (map(hex,a))
    # 我们可以看到字节已经交换了

    输出结果为:

    我们的数组是:
    [   1  256 8755]
    以十六进制表示内存中的数据:
    <map object at 0x104acb400>
    调用 byteswap() 函数:
    [  256     1 13090]
    十六进制形式:
    <map object at 0x104acb3c8>

    NumPy 矩阵库(Matrix)
    NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。
    一个 的矩阵是一个由行(row)列(column)元素排列成的矩形阵列。
    矩阵里的元素可以是数字、符号或数学式。以下是一个由 6 个数字元素构成的 2 行 3 列的矩阵:

    matlib.empty()
    matlib.empty() 函数返回一个新的矩阵,语法格式为:
    numpy.matlib.empty(shape, dtype, order)
    参数说明:

    shape: 定义新矩阵形状的整数或整数元组
    Dtype: 可选,数据类型
    order: C(行序优先) 或者 F(列序优先)

    numpy.matlib.zeros()
    numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。
    numpy.matlib.ones()
    numpy.matlib.ones()函数创建一个以 1 填充的矩阵。
    numpy.matlib.eye()
    numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
    numpy.matlib.eye(n, M,k, dtype)
    参数说明:

    n: 返回矩阵的行数
    M: 返回矩阵的列数,默认为 n
    k: 对角线的索引
    dtype: 数据类型

    numpy.matlib.identity()
    numpy.matlib.identity() 函数返回给定大小的单位矩阵。
    单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
    numpy.matlib.rand()
    numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。

    别废话,拿你代码给我看。
  • 相关阅读:
    Debug模式下不崩溃, Release模式下偶尔发生崩溃的解决思路
    Qt assistant资料集
    Qt assistant 问题记录集
    QSharePointer QMap引发的问题 std::shared_ptr
    《C++ primer 第五版》读书笔记
    解决QT无法调试问题-----the cdb process terminated
    Web
    小技巧
    CodeIgniter中使用CSRF TOKEN的一个坑
    nginx日志分割小脚本
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707505.html
Copyright © 2020-2023  润新知