目录

前言

numpy是什么?

一、创建数据容器

1.np.array(),通过传递一个列表,元祖来创建

2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数,来创建一个初始化的数组

3.np.linspace()与np.arange()的使用

4.运用np.random来创建随机数数组

5.数组的常见属性

二、操作数据容器

1.数组的变形

2.数组的拼接

3.数组的分裂

三、读取和修改数据

1.下标索引

2.切片索引

3.掩码索引(布尔型索引)

4.花哨的索引(有的书翻译成花式索引)

5.组合索引

6.数据的修改

四、操作数据

1.通用函数

2.聚合操作

3.数组元素的排序

五.从线性代数的角度来使用numpy

1.矩阵的乘法

2.矩阵的转置和逆

3.numpy的多项式拟和---np.polyfit()

4.numpy求解线性方程组 ---np.linalg.solve()

六.数组的读取与存储



前言

python作为一个胶水语言,如今在数值科学计算,数据分析,机器学习等方面作为一个常用的工具发挥着重要的作用,其中自然少不了python的numpy库的应用,今天我们就一起来探索numpy库对数据的相关操作与用法,也可以为后面pandas库和matplotlib库做好充分的准备基础

numpy是什么?

numpy库是是用python进行数值计算、矩阵运算、数据处理、数据分析的常用库,也是进一步学习pandas库的基础,既然是去对数据进行处理,我把numpy对数据的操作归纳为四个部分来进行介绍,分别是1.创建数据容器 2.操作容器 3.读取与修改数据4.操作数据 。下面我们来对这四个部分来分别进行详细介绍

一、创建数据容器

既然要分析数据,那我们肯定得先用一个容器把数据装起来吧,所以第一步就是创建数据容器。

1.np.array(),通过传递一个列表,元祖来创建

示例如下:

2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数,来创建一个初始化的数组

示例如下:

3.np.linspace()与np.arange()的使用

4.运用np.random来创建随机数数组

1.np.random.rand(),根据传入形状参数创建元素为来自[0,1)的随机数的数组

2.np.random.randn(),根据传入形状参数创建元素为满足标准正态分布的数组

3.np.random.random(),根据传入形状参数创建元素为来自[0,1)的随机数的数组

4.np.random.randint(),根据传入的取值范围和形状参数创建元素为来自范围内的随机整数的数组

5.np.random.normal(),根据传入的数学期望、方差和形状参数来创建元素满足对应正态分布的数组

注意:np.random.rand()和np.random.randn为直接传入形状参数数字,不需要以元祖或者列表的形式去传入维数,且以上函数可以不传入任何参数使用,用来生成一个满足条件的随机数。

5.数组的常见属性

数组常见的属性有四个:shape--形状,ndim--数组维度,size--数组元素的个数,dtype--数组元素的数据类型,示例如下:

其中的dtype属性一般最值得注意,因为数组只能存储一种数据类型,存在和C语言类似的强制数据类型转换,我们可以利用astype()方法传入想要转化的数据类型来进行操作,如下:

注意:astype()方法并非原地修改,而是在不修改原数组的基础上返回一个新数组.

二、操作数据容器

好了通过上面我们已经创建了我们的数据容器--数组,但是有时候我们可能需要把一个数据容器分割成多个数据容器,或者把多个数据容器合并成一个数据容器,这就要讲到操作数据容器,其中包括数据的变形与数组的拼接和分裂

1.数组的变形

数组的变形主要是用数组的reshape()方法来实现,只需以数组或者列表的方法传入形状参数便会返回对应的数组(原数组并没有改变,且返回的数组是原数组的副本视图),示例如下:

注意:通过reshape()方法返回的为原数组的副本视图,即在返回数组上进行相关操作,都会反应在原数组上面,示例如下:

这种返回副本视图的方式,有时候为我们做数据分析提供了一些便利,在后续数据分析的实战你会感觉的到,但是有时候你可能会想要避免这种情况,比如要用python进行一些矩阵相关的算法实现时,那么你可以使用python的copy方法,示例如下:

2.数组的拼接

数组的拼接就是将二个数组拼接在一起,主要是使用numpy库的concatenate()函数,它的第一个参数是传入一个列表或者元祖,里面包含着要进行拼接的数组,另外一个则是轴参数,axis,要详细的了解axis参数可以参考我的另一篇博客:对python的numpy库和pandas库相关方法和函数的axis参数的理解

下面直接在示例中对concatenate()函数进行介绍:

另外numpy库还有二个用于数组拼接的函数,分别是hstack()函数--水平拼接,vstack--垂直拼接,他们只需要传入包含拼接数组的列表或者元祖即可,hstack相当于指定了axis=1,按列进行拼接,vstack相当于指定了axis=0,按行进行拼接,示例如下:

注意:concatenate()函数和hstack()函数、vstack()函数也是在不改变原数组的情况下返回原数组的副本视图,如果想要避免需要使用copy()方法进行拷贝后赋值。

3.数组的分裂

数组的分裂就是根据指定的分裂点来对数据进行分裂,对于一维的数组通常使用numpy库的split()函数,他只需要二个个参数,一个是要进行分割的一维数组,另一个就是分割点(这里可能会用到一些数组取值的地方,如果不了解可以先看一下下面的“获取和修改数据”),示例如下:

对于一维数组我们一般使用split()函数,对于二维我们一般使用hsplit()--水平分割和vstack()--垂直分割。对hsplit()函数,我们只需要传入要分割的数组和对应的分割列索引。对vsplit()函数,我们只需要传入要分割的数组和对应的分割行索引.示例如下:

注意:数组的分裂返回的数组也是原数组的副本视图。

三、读取和修改数据

将数据用数据容器数组装起来以后,自然少不了数据的存取与修改了,接下来来介绍对数组中数据的读取与修改。

1.下标索引

了解过其他编程语言的同学对下标索引应该十分熟悉,直接看示例:

这些就是下标索引的常用方法,十分快捷有效,但是想要重分使用python的简洁与方便,可以使用python的切片对数据进行索引

2.切片索引

话不多说,直接上例子:

3.掩码索引(布尔型索引)

所谓掩码就是通过传入一个布尔类型的数组来进行索引,会返回对应位置为True的元素

示例如下:

4.花哨的索引(有的书翻译成花式索引)

花哨索引是指传入一个数组,数组内包括要进行索引的数据对应的下标,返回的是一个新的数组(下标索引返回的是一个数据)

直接上例子:

5.组合索引

所谓组合索引就是将上面的四种索引方法组合起来使用,我们来看一下常用的组合索引例子:

注意:上述索引方法,除花哨索引返回的是一个新的数组,其他索引方法返回的都是原数组的副本视图。

6.数据的修改

有了数组的获取,修改就十分容易,只要对获取的数据进行重新赋值就可以,示例如下:

四、操作数据

对数据的操作,主要包括三个部分:通用函数,聚合,排序,下面来一一进行介绍

1.通用函数

python的numpy库的数组运算是和R语言类似的,具有向量性,我们通过数组的加减乘除来说明这一点:

当二个数组形状相等时则就是二个数组对应位置的数据做对应的运算:

当二个数组形状不同是,则此时遵循广播规则,关于广播规则详细可以查看我的另外一篇博客:numpy库数组运算的广播规则,这里就简单看几个例子

这里的+,-,*,/  其实是numpy库通用函数的简化形式,其具体及其补充应如下:

下面展示一些通用函数的常用示例:

2.聚合操作

聚合操作在数据分析与统计学中经常用到,就是得到一个整体的统计量,对数据整体进行一个概括性的描述,numpy中常见的用于数据的聚合方法如下:

下面来展示一些常用的聚合方法:

还有二个用于布尔类型的数组的常用方法any()和all(),any用于检测数组中是否存在一个或者多个True,all()用于检测数组中是否都是True,示例如下:

3.数组元素的排序

python有自带的sort排序可以使用在数组对象上,但是numpy库也有自己的sort方法,它是基于C语言的快速排序算法编写的,所以在面对大量的数据时,运行速度会比python自带的sort方法更快。对一维,可直接使用,对二维数组则需要传入轴参数axis。示例如下:

注意:sort方法是对数组进行原地排序,如果想在不改变原数据的情况下返回一个排序好的新数组(不是原数组的副本视图),则可以使用np.sort()函数。

如果想要获得原始数组排序好的索引值可以使用argsort()方法或者np.argsort()函数,示例如下:

五.从线性代数的角度来使用numpy

numpy中有一个linalg模块,其中包括了一些我们所学的线性代数的操作,下面我对其中一些常用的操作进行介绍

1.矩阵的乘法

要让二个array对象进行矩阵的乘法首先需要它们满足线性代数中进行矩阵乘法的条件,然后使用@ 即为进行线性代数中矩阵的乘法,示例如下:

2.矩阵的转置和逆

求矩阵的转置:

求矩阵的逆(注意前提是矩阵有逆,例如上面的矩阵A就是没有逆的,它行列式为0): 

3.numpy的多项式拟和---np.polyfit()

虽然这个不是线性代数的部分,但是还是想要说说

数学支撑:任何可微连续的函数,都可以用一个N次多项式来估计,而比N次幂更高阶的部分为无穷小可以忽略不计

即:对于一堆数据点(x, y),可以只根据这些数据,找出一个多项式函数,使得函数画出来的曲线和原始数据曲线尽量匹配,示例如下:

4.numpy求解线性方程组 ---np.linalg.solve()

由线性代数知识,一个线性方程组可以表示为AX = b的形式,由此可以调用np.linalg.solve来对其进行求解,示例如下:

由于该线性方程具有唯一解,我们可以用逆矩阵的解法来进行检验:

验证应该和上述方法所求的解是相同的,上述逆矩阵求解的结果是由于计算机对浮点数的存储机制所造成的。

六.数组的读取与存储

对array数组对象的读取与存储主要有四种方法:

1.np.load(filename):从.npy或者.npz文件中加载numpy数组,如果文件后缀是.npy返回单个数组,如果文件后缀是.npz返回多个数组的字典

2.np.save(filename, arr):将单个numpy数组保存到.npy文件中

3.np.savez(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz未压缩的文件格式中

4.np.savez_compressed(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz压缩的文件格式中

示例如下:

np.savez_compressed的使用和np.savez相同 。

总结

以上就是我对python的numpy库的常用操作的了解与学习笔记,如果文章有错误和一些常用操作的缺少希望大家在评论区给予意见,如果有问题也可以在评论区进行询问,我会及时给予回复,大家一起进步和提高!

python的 numpy库学习总结和介绍(超详细)模块相关推荐

  1. 【Python扩展阅读EasyGui 学习文档【超详细中文版】】

    转载来源:http://www.itnose.net/detail/6107761.html 0. 安装 EasyGui 官网:http://easygui.sourceforge.net 最新版: ...

  2. python 的numpy库中的mean()函数用法介绍

    这篇文章主要介绍了python 的numpy库中的mean()函数用法介绍,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 mean() 函数定义: 2 mean()函数功能: 求取均 ...

  3. 【Python之pymysql库学习】一、分析fetchone()、fetchmany()、fetchall()(保姆级图文+实现代码)

    目录 实现效果 实现思路 实现代码 总结 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 实现效果 实现思路 其 ...

  4. 【Python之pymysql库学习】二.游标cursor的相关知识(保姆级图文+实现代码)

    目录 读取的数据类型 读取的数据转为字典类型效果 读取的数据转为字典类型实现思路 读取的数据转为字典类型实现代码 关于游标的重置 总结 欢迎关注 『Python之pymysql库学习』 系列,持续更新 ...

  5. 【Python之pymysql库学习】三.sql语句的相关知识(保姆级图文+实现代码)

    目录 实现效果 实现思路 实现代码 总结 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 实现效果 把给读取数据 ...

  6. Python:numpy库中的一些函数简介、使用方法之详细攻略

    Python:numpy库中的一些函数简介.使用方法之详细攻略 目录 numpy库中的一些函数简介.使用方法 1.np.concatenate() 1.1.函数案例 1.2.函数用法 numpy库中的 ...

  7. [转载] Python里面numpy库中zeros()的一些问题

    参考链接: Python中的numpy.zeros Python里面numpy库中zeros函数的一些问题 定义 本文记录了在使用numpy库中的zeros函数时遇到的一些问题 定义 用法:zeros ...

  8. python之turtle库学习(海龟图形)

    python之turtle库学习 这两天在一个公众号里看到一个文章好玩的库,今天来学习一下.Github地址 一.方法 1.forward() | fd():向前移动指定的距离.参数:一个数字(int ...

  9. 全国计算机等级考试二级Python精品题库学习笔记1

    全国计算机等级考试二级Python精品题库学习笔记1 精品试卷01 精品试卷01程序题 基本操作题 2:随机验证码 基本操作题 3:比赛成绩计算 Turtle 绘图题:同心圆 简单应用题 2:员工工资 ...

最新文章

  1. 谷歌大脑新研究:强化学习如何学会用声音来观察?
  2. 北欧小国的宏大AI实验:让1%的人口接受人工智能培训
  3. 利用配置编辑器改变Ubuntu10按钮位置
  4. ubuntu 源码安装nginx
  5. Sublime Text 3 中文乱码的解决方法
  6. Python学习笔记--程序控制结构
  7. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用
  8. 边框回归:BoundingBox-Regression(BBR)(转)
  9. Spring配置文件总结
  10. Attachments
  11. 将两个顺序表合并为一个新的顺序表
  12. JMP入门官方文档---发现JMP.pdf---中文版
  13. css 背景渐变详解
  14. win7任务栏谷歌浏览器图标显示异常
  15. C语言:利用指针编写程序,将一个一维数组a[10]中的最大元素与第一个元素互换、将最小元素与最后一个元素互换
  16. 财会法规与职业道德【1】
  17. VisualSVN破解
  18. tf.saved_model.save报错解决
  19. ssd nvme sata_NVMe SSD与传统SATA SSD
  20. Android手机ROM定制初级教程以及Android系统文件夹结构介绍【转】

热门文章

  1. 迪斯尼使用RFID技术,助力知识产权保护
  2. 微信用什么留住用户量?
  3. JQ或JS仿京东淘宝属性规格SKU样式
  4. 《花开半夏》--十二岁·遇见
  5. Electron 打开保存文件对话框
  6. Android 12.0 SystemUI状态栏屏蔽掉通知栏不显示通知
  7. MySQL数据库 *实验17存储过程
  8. C#与SAP接口对接
  9. python中如果出现中文注释或出现encode character u'\u201c'执行出错的解决方法
  10. 深入理解相机体系 三 相机应用层 APP