【Python学习】Nupmy库

之前的笔记已经将python的基础语法部分已经基本学完了,下面就开始学习python中最常用的一些第三方库。本篇学习数组运算的numpy库。

一.Numpy库介绍

在利用编程进行数据处理时,我们经常需要遇到通过列表来进行数据存储与运算的情况,一般表现形式为二维数据或多维数据。在python中,一维数据可以用列表和集合类型表示,二维或多维用列表表示,高维则用字典等其他数据表示格式。

但为了运算方便以及提升运行速度,我们需要更快更便捷的一个数据类型进行多维数据的存储(以避免列表存储时利用循环而增加的空间复杂度。)

数组优点:

1.去掉默认数据类型进行多维运算的循环,使一维变量更像单个数据。

2.提升运算速度

3.采用相同的数据类型,有利于节省运算和存储空间

numpy库:

NumPyNumerical 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

一元算数函数:

通用函数 (ufunc) 是一种对 ndarray 中的数据执行 元素级运算 的函数,可看作为简单函数的矢量化函数。
函数表:

 这些函数是直接对数组中的所有数据进行操作的,如果运用math库中进行可能无法实现矢量化。

 二元算数函数:

函数表:

 矩阵生成函数:

        xx,yy=np.meshgrid(x,y)

适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。其中生成的第一个二维数组是以xarray为行,共y-dimesion行的向量;第二个二维数组是以yarray的转置为列,共x-dimesion列的向量。

三元函数:

numpy.where 函数是三元表达式 x if condition else y 的矢量化版本。
集合逻辑:
主要针对一维数组。

 统计函数:

 注:axis是指轴

伪随机数生成:

常见分布函数的随机数 :

 线性代数:

线性代数是任何数组库的重要组成部分, linalg 模块 中有标准的矩阵分解运算以及诸如求逆和行列式之类的函数。

 专用函数:

 缺省值处理:

 五.Numpy文件操作

关键函数:

 np.loadtxt函数:

 读写文件函数:

读:

        np.loadtxt(frame,dtype=np.float, delimiter=None,unpack=False)

写:

        np.savetxt(frame, array, fmt='%.18e', delimiter=None)

END;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值