• [基础库Numpy] 技能树总结:一篇文章学会Numpy库


    目录

    1.基础库的下载

    (1)终端窗口下载安装

    (2)包管理器搜索下载

    2.Numpy库常用API简介

    (1)创建数组

    #构造法

    #特殊值法

    #随机数法

    #定长分割法

    #重复构造法

    #网格构造法

    (2)操作数组

    #索引和切片

    #结构的改变

    #合并与拆分

    #复制

    #排序

    #查找

    #筛选     

    #数组I/O   读入/保存文件  

    (3)创建矩阵对象

    #构造法

    #特殊值法

    (4)操作矩阵对象

    #矩阵变换

    #矩阵运算

    #矩阵插入

    (5)常用函数

    #特殊值

    #函数的命名空间

    #数学函数

    #统计函数

    #一维线性插值

    #多项式拟合函数

    #自定义广播函数

    (6)掩码数组

    #创建掩码数组

    #访问数据

    #访问掩码

    #仅获取有效值

    #修改掩码

    #掩码数组操作


    1.基础库的下载

    (1)终端窗口下载安装

    pip install 库名称

    如果想要快速下载可以后面输入镜像网站

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  库名称

    (2)包管理器搜索下载

    2.Numpy库常用API简介

    参考资料,以下文章有部分借鉴和汇总:

    1.【Python】numpy常用API整理汇总_zstar-_的博客-CSDN博客_numpy中文api下载

    2.NumPy概述-科学计算基础软件包NumPy-CSDNPython进阶技能树3.https://edu.csdn.net/learn/32433/501770

    4.常用函数-科学计算基础软件包NumPy-CSDNPython进阶技能树

    5.np.where()的使用方法_YECHAOOO的博客-CSDN博客_np where6.线性插值 np.interp()_Better-1的博客-CSDN博客_np.interp7.np.where()的使用方法_YECHAOOO的博客-CSDN博客_np where

    8.数学建模方法—【04】拟合方法之np.polyfit、np.poly1d_土豆同学的博客-CSDN博客_np.poly1d9.Numpy中矩阵运算_IT之一小佬的博客-CSDN博客_np矩阵运算

    10.numpy.ma详解_zhenyu wu的博客-CSDN博客_numpy.ma

    1. #导入numpy
    2. import numpy
    3. #导入numpy 并给别名np
    4. import numpy as np

    (1)创建数组

    #构造法

    numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

    object:数组,可以为任意多纬

    dtype:数据类型

    #特殊值法

     #全零矩阵

     numpy.zeros(shape, dtype=float, order=‘C’)

     #全1矩阵
     numpy.ones(shape, dtype=float, order=‘C’)

     #全空矩阵,实际为极小数
    numpy.empty(shape, dtype=float, order=‘C’)

     #单位矩阵,就是维度序号一致的位置为1
    numpy.eye(N, M=None, k=0, dtype=float, order='C’)

    #随机数法

     #随机数0-1,维度大小为size矩阵

     numpy.random.random(size=None)

    #随机数在low-high之间,维度大小为size矩阵
    numpy.random.randint(low, high=None, size=None, dtype=‘l’)

     #随机数以loc为均值,scale为方差。维度大小为size的正态矩阵
    numpy.random.normal(loc=0.0, scale=1.0, size=None)  

     #随机抽样

    numpy.random.choice(a, size=None, replace=True, p=None)

     a :待抽样的全体样本,它只接受整数或一维的数组。如果是整数,相当于将数组 np.arange(a) 作为全体样本。

     size:返回抽样结果数组的结构(shape)。

     replace :是否允许多次抽取同一个样本,默认为允许。

     p :全体样本集合等长的权重数组,用于指定对应样本被抽中的概率。

    #定长分割法

    #star开始,stop结束,间隔步长为step生成数组

    numpy.arange(start, stop, step, dtype=None)

    #star开始,stop结束,生成num个数的数组
    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 

    #重复构造法

    #重复a数组,repeats次,在axis轴展开,不指定axis默认平展

    numpy.repeat(a, repeats, axis=None)

    #reshape形状矩阵中的每一个数替换为a数组返回

    numpy.tile( a, reshape)

    #网格构造法

    #经纬线网格构建,实质是数组在其他轴向的重复

    lons,lats = np.meshgrid(lon,lat)

    lats, lons = np.mgrid[-90:91:5., -180:181:5.]

    (2)操作数组

    #索引和切片

    #"[]”和“:”的使用

    #以二维数组为例子

    array[x1:x2,y1:y2]#切片x1-x2行,y1-y2列的矩阵

    array[x1,:]#x1行所有数据的矩阵

    array[-1,:]#最后一行数据的矩阵

    array[:3,:]#前3行所有数据的矩阵

    array[::-1,:]#行按倒叙输出所有矩阵

    #结构的改变

    #按照指定的结构(形状)返回数组的新视图,但不会改变数组

    array.reshape() 

    #按指定结构改变数组,没返回值

    array.resize()

    #返回多维数组一维化的视图,但不会改变原数组

    array.ravel()

    #返回行变列的视图,但不会改变原数组

    array.transpose()

    # 翻滚轴,返回新的视图

    array.rollaxis()

    #合并与拆分

    #stack合并

    numpy.hstack((a,b)) # 水平合并

    numpy.vstack((a,b)) #垂直合并

    numpy.dstack((a,b)) #深度合并

    #在axis轴向上合并arr1和arr2数组

    numpy.append(arr1,arr2,axis=0)

    #复制

    #深复制,独享内存

    array.copy()

    #浅复制,共享内存

    array.view()

    #排序

    #返回排序的数组

    numpy.sort(a, axis=-1, kind=‘quicksort’, order=None)

    #返回排序的数组序号
    numpy.argsort(a, axis=-1, kind=‘quicksort’, order=None)

    a:要排序的数组
    axis : 沿着它排序数组的轴,如果没有,则沿着最后的轴排序
    kind :排序方法,默认为’quicksort’快速排序, ‘mergesort’归并排序和 ‘heapsort’堆排序
    order :如果数组包含字段,则是要排序的字段

    #查找

    #返回a数组最小值序号

    numpy.argmin(a)

    #返回a数组最大值序号

    numpy.argmin(a)

    #返回a数组非0序号

    numpy.nonzero(a)

            

    #当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y

    #当where内只有一个参数时,那个参数表示条件,当条件成立时,where返回的是每个符合condition条件元素的坐标,返回的是以元组的形式

    numpy.where(condition,x=a,y=null)

    condition:条件例如array>5

    x:数组成立元素返回形式,例如array*2,成立元素返回2倍

    x:数组不成立元素返回,例如array*3,不成立元素返回3倍


    #筛选     

    #使用numpy.where()返回的python元组

    array[numpy.where(array>5)]  #返回a数组中大于5的数

    #利用逻辑表达式的布尔数组作为筛选条件

    array[array>5&array<10]#返回a数组中大于5,小于10的数

    #返回整数数组指定项

    array[numpy.array([2,3,5])]#返回a数组2,3,5下标的数

    #数组I/O   读入/保存文件

    # 将数组a保存成CSV格式的数据文件

    numpy.savetxt('demo.csv', a, delimiter=',')

    # 打开CSV格式的数据文件

    np.loadtxt('demo.csv', delimiter=',')

            

    #numpy自定义数据格式

    .npy存单个数组

    numpy.save('demo.npy', a) # 保存成.npy文件

    numpy.load('demo.npy') # 读取.npy文件

    .npz存多个数组

    np.savez('demo.npz', a1name=a1, a2name=a2) #保存两个数组到一个文件
    data = np.load('demo.npz') # 用load()函数把这个.npz文件读成一个结构data
    data.files # 查看所有的数组名
    data['a1name'] # 使用data[数组名],就可以取得想要的数据

     

            

    (3)创建矩阵对象

    #构造法

    m=numpy.mat(列表、数组或字符串, dtype)

    #特殊值法

    #numpy.matlib子模块

    numpty.matllib.zero(size)#全0矩阵

    numpty.matllib.ones(size)#全1矩阵

    numpty.matllib.eye(int)#单位矩阵

    numpty.matllib.empty(size)#全空矩阵

    numpty.matllib.randn(size)#标准正态高斯矩阵

    (4)操作矩阵对象

    #矩阵变换

    #转置矩阵

    m.T

    m.transpose()

    #逆矩阵

    m.I

    #共轭转置矩阵

    m.H

    # 返回自身数据的视图(ndarray类)

    m.A

    #矩阵运算

    #点乘(运算矩阵后位置(i,j)的数为左矩阵的行i乘右矩阵的列j相加所得的结果)

    np.dot(m1,m2)#允许矩阵与标量

    np.matmul(m1,m2)#不允许矩阵与标量

    #对应位置相乘

    m1*m2

    #加法

    m1+m2

            

    #Linalg库     

    linalg.det(m)              #行列式‘

    linalg.matrix_rank(m)#矩阵的秩

    #矩阵插入

    np.insert(m,index,date,axis)

    index:插入位置

    date:插入数据

    axis:插入轴,如果不写,会降维度成数组

    (5)常用函数

    #特殊值

    #not a number不是数字

    numpy.nan、numpy.Nan、numpy.NaN

    #infinity无穷大

    numpy.inf

    #函数的命名空间

    顶层空间的函数,numpy和array都支持;也有各自特殊的函数

    顶层命名空间和数组对象均支持仅数组对象均支持仅顶层命名空间支持
    np/ndarray.any()/all()ndarray.astype()np.where()
    np/ndarray.max()/min()ndarray.fill()np.stack()
    np/ndarray.argsort()ndarray.view()np.rollaxis()
    np/ndarray.mean()ndarray.tolist()np.sin()

    #数学函数

    numpy库与math库比较

    NumPy函数math函数功能
    np.emath.e自然常数
    np.pimath.pi圆周率
    np.ceil()math.ceil()进尾取整
    np.floor()nath.floor去尾取整
    np.around()四舍五入到指定精度
    np.rint()四舍五入到最近整数
    np.deg2rad()/radians()math.radians度转弧度
    np.rad2deg()/degrees()math.degrees()弧度转度
    np.hypot()math.hypot()计算直角三角形的斜边
    np.square()平方
    np.sqrt()math.sqrt()开平方
    np.power()math.pow()
    np.exp()math.exp()指数
    np.log()/log10()/log2()math.log()/log10()/log2()对数
    np.sin()/arcsin()math.sin()/asin()正弦/反正弦
    np.cos()/arccos()math.cos()/acos()余弦/反余弦
    np.tan()/arctan()math.tan()/atan()正切/反正切

    #统计函数

    函数功能
    np.max/min(a, axis=None)
    np.nanmax/nanmin(a, axis=None)
    返回数组中的最大值/最小值
    忽略nan返回数组中的最大值/最小值
    np.argmax/argmin(a, axis=None)
    np.nanargmax/nanargmin(a, axis=None)
    返回数组中最大值和最小值的索引
    忽略nan返回数组中最大值和最小值的索引
    np.ptp(a, axis=None)返回数组中元素最大值与最小值的差
    np.median(a, axis=None)
    np.nanmedian(a, axis=None)
    返回数组元素的中位数
    忽略nan返回数组元素的中位数
    np.sum(a, axis=None)
    np.nansum(a, axis=None)
    按指定的轴求元素之和
    忽略nan按指定的轴求元素之和
    np.cumsum(a, axis=None)
    np.nancumsum(a, axis=None)
    按指定的轴求元素的累进和
    忽略nan按指定的轴求元素的累进和
    np.diff(a, axis=-1)按指定的轴返回相邻元素的差
    np.prod(a, axis=None)
    np.nanprod(a, axis=None)
    按指定的轴求元素之积
    忽略nan按指定的轴求元素之积
    np.mean(a, axis=None)
    np.nanmean(a, axis=None)
    按指定的轴返回元素的算数平均值
    忽略nan按指定的轴返回元素的算数平均值
    np.average()根据权重数据,返回数据数组所有元素的加权平均值
    np.var(a)
    np.nanvar(a)
    返回数组方差
    忽略nan返回数组方差
    np.std()
    np.nanstd()
    返回数组标准差
    忽略nan返回数组标准差
    np.corrcoef(a, b)返回两个数组的皮尔逊积矩相关系数

    #一维线性插值

    y = np.interp(x, xp, fp)
    x: 数组 待插入数据的横坐标.

    xp: 一维浮点数序列,原始数据点的横坐标,如果period参数没有指定那么就必须是递增的。否则,在使用xp = xp % period正则化之后,xp在内部进行排序.

    fp: 一维浮点数或复数序列,原始数据点的纵坐标,和xp序列等长.
    #其他更加复杂的插值功能放到了SciPy中

    #多项式拟合函数

    #拟合系数数组p

    p=numpy.polyfit(x,y,deg )

    参数:

    p:系数数组,以幂次递减
    x: 类数组,形状(M,),表示M个采样点的x坐标
    y: 类似array_,形状为(M,)或(M,K), 表示采样点的y坐标。通过传递每列包含一个数据集的2D数组,可以一次拟合多个共享相同x坐标的采样点数据集
    deg: 度:整数, 表示拟合多项式的度

    #拟合系数数组p构成多项式gx

    gx=numpy.poly1d(c_or_r,r = False,变量= None )

    参数:

    gx:返回的多项式
    c_or_r: 数组array,代表多项式的系数,以幂次递减,或者如果第二个参数的值为True,则为多项式的根(多项式求值为0的值)。
    r bool(可选): 如果为True,则c_or_r指定多项式的根。默认值为False。
    可变str(可选): 将打印p时使用的变量从x更改为variable

    #自定义广播函数

    np.frompyfunc()

    np.vectorize()

    (6)掩码数组

    import numpy.ma as ma

    掩码数组的作用,掩膜掩盖数组满足条件的一部分值,进行剩余数据的操作

    #创建掩码数组

    #列表创建掩码数组

    marray=ma.array([0, 1, 2, 3], mask=[0, 0, 1, 0]) # 指定第3个元素无效

     #ma中其他函数方法创建掩码数组

            

           

    #访问数据

    marray.data

    ma.getdata(marray)

    #访问掩码

    marray.mask

    ma.getmask(marray)#marray不为掩码数组,则返回nomask

    ma.getmaskarray(marray)#marray不为掩码数组,则返回等长数组的false

    #仅获取有效值

    marray.compressed()

    marray[~marray.mask]

    #修改掩码

    #增添掩码,将掩码值ma.masked赋给它们

    marray[:2]=ma.masked#前俩个数掩码

    #删除掩码,直接赋值

    #注意:当掩码数组属性为hard_mask=true时,可能不能有效地对其解除屏蔽。这个特性是为了防止用户对掩码值进行覆盖。要想取消数组的hard_mask属性,必须在解除屏蔽前先对其利用soften_mask方法进行软化。当然,修改完毕之后也可以使用harden_mask属性防止掩码部分被修改:
     

    #掩码数组操作

    因为掩码数组 MaskedArray 类是 numpy.ndarray 的派生类,所以那些用在普通 NumPy 数组上的索引和切片操作,数学函数,常用函数同样也会继承

  • 相关阅读:
    vue + vant van-pull-refresh 列表页记录滚动条位置,详情再返回列表页后还原记录的滚动条位置
    【精讲】vue中的集成动画及配置代理
    Java 多线程编程核心技术有哪些
    开发一个简单的http模板之序章
    ovs vxlan实现代码分析
    BDD - SpecFlow Driver Pattern 驱动模式
    Windows安装Linux子系统
    WebRTC 的多媒体音视频帧传输协议
    unity中跟随鼠标浮动的面板,并可以自适应文字内容的大小
    【0】数学的魅力
  • 原文地址:https://blog.csdn.net/qq_54263076/article/details/127443668