之前的笔记已经将python的基础语法部分已经基本学完了,下面就开始学习python中最常用的一些第三方库。本篇学习数组运算的numpy库。
一.Numpy库介绍
在利用编程进行数据处理时,我们经常需要遇到通过列表来进行数据存储与运算的情况,一般表现形式为二维数据或多维数据。在python中,一维数据可以用列表和集合类型表示,二维或多维用列表表示,高维则用字典等其他数据表示格式。
但为了运算方便以及提升运行速度,我们需要更快更便捷的一个数据类型进行多维数据的存储(以避免列表存储时利用循环而增加的空间复杂度。)
数组优点:
1.去掉默认数据类型进行多维运算的循环,使一维变量更像单个数据。
2.提升运算速度
3.采用相同的数据类型,有利于节省运算和存储空间
numpy库:
NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包,其中包含了数组对象(向量、矩阵、图像等)以及线性代数等。
由于numpy库大部分是由C语言编译而成,底层逻辑上更加优异,运算更为便捷。
numpy中包含定义了一个ndarray数组,ndarray数组采用了数组的索引机制,它是由一系列类型相同的元素组成的集合,且每个元素占有相同的内存大小。
数组的维数称作秩,每一个线性的数组称为轴
二.数组的创建
数组主要有一下四种创建方式:
1.从Python中的列表元组等类型创建ndarray数组。
2.使用nupmy中函数创建ndarray数组.
3.从字节流中创建数组。
4.从文件中读取特定格式创建ndarray数组。
1.从Python中的列表元组等类型创建ndarray数组:
语法结构:
np.array(list/tuple,dtype=np.float32)
注:dtype指定数组元素类型,其具体由以下的类型:
因为numpy进行的科学计算涉及数据较多,对存储和性能都有很高要求,更精细的处理有利于Numpy合理使用存储空间并优化性能。
2.使用nupmy中函数创建ndarray数组:
3.已知尺度大小创建数组:
4.数组的属性
5.数组维度的变化
6.数组转化为列表
语法:
array.tolist()
注:array是数组的默认称呼。
7.数组的组合与分割
水平方向:
组合:np.concatenate((a, b), axis=1)
分割:np.split(a, 3, axis=1)
垂直方向:
组合:np.concatenate((a, b), axis=0)
分割:np.split(a, 3, axis=0)
深度方向:
组合:np.dstack((a, b))
分割:np.dsplit((a, b))
三.数组的索引
一维数组的索引与普通列表等数据类型类似:
array_name[索引值或序列]
注:数组是一个可变对象,通过数组索引进行的赋值更改都会对数组本身产生影响。同样,对数组进行切片或利用copy()得到视图后,如果对切片或视图进行更改,也会影响到原数组。
二维数组的索引较为简便,在索引框【】中用逗号分割即可。
ndarry[axis0_slice, axis1_slice]
注:如果要对纵行所有的行进行特殊操作,可直接用 : 代替axis0_slice。
举例讲解:
常见的替代情况如上图,:代表了行或列的所有元素,而2和1带表了切片的终止或起始位置,如果要对array.arange(9).reshape(3,3)进行切片,则只截取到第二行,且列从第一列开始截取。
在进行数组建立时,可以用-1填写数组的行数部分,系统会根据列数和arange所设定的个数自动分配行数。
二维数组的增删改查:
四.数组的矢量化
矢量化是指不用循环即可实现数据的批量运算,且每个运算都针对到元素级。
布尔型索引:
当存在两个数组,一个一维数组的元素个数与另一个二维数组的某秩的轴数相同,则二者可产生对应关系,可利用一维数组的某个元素提取出二维的数据元组。
注:布尔型索引不需要手动的标注,在我们利用一维数组进行查找与判定时,系统内部已经自动的进行了布尔类型的判断。
布尔型数组的一般定义方式为:
数组名=(逻辑数大小表达式)
布尔数组的各类方法:
函数调用:
注,全部是内置函数
sum():被用来对布尔型数组中的True值计数
any():测试数组中是否存在一个或多个True
all():检查数组中所有值是否都是True
一元算数函数:
这些函数是直接对数组中的所有数据进行操作的,如果运用math库中进行可能无法实现矢量化。
二元算数函数:
函数表:
矩阵生成函数:
xx,yy=np.meshgrid(x,y)
三元函数:
统计函数:
注:axis是指轴
伪随机数生成:
常见分布函数的随机数 :
线性代数:
专用函数:
缺省值处理:
五.Numpy文件操作
关键函数:
np.loadtxt函数:
读写文件函数:
读:
写:
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
END;