[基础库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

#导入numpy
import numpy
#导入numpy 并给别名np
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.e math.e 自然常数
np.pi math.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 数组上的索引和切片操作,数学函数,常用函数同样也会继承

猜你喜欢

转载自blog.csdn.net/qq_54263076/article/details/127443668