当前课程知识点:计算思维与人工智能基础 >  第三部分:python基础 >  第八章:python生态库 >  8.8第三方库-numpy库(上)

返回《计算思维与人工智能基础》慕课在线视频课程列表

8.8第三方库-numpy库(上)在线视频

下一节:8.9第三方库-numpy库(下)

返回《计算思维与人工智能基础》慕课在线视频列表

8.8第三方库-numpy库(上)课程教案、知识点、字幕

下面我们给大家介绍三个关于科学计算的第三方库

分别是Numpy用于数组的计算

pandas用于数据结构的分析以及重建索引切片排序等等工作

matplotilb主要用于用图来展示数据

分别可以用折线图散点图饼状图等等

首先我们看一下numpy库的使用

在numpy库的使用里面呢

我们会常用的对象就是numpy的数组对象ndarray的对象

ndarray对象是存储单一数据类型的多维数组

那么如何创建他呢

我们可以通过三种方式第一种方式呢

创建一个序列通过把它转换成数组

那另外呢第二种方法就是我们可以有一些

专用的创建的序列和数组的方法来创建

第三种方法呢

我们是可以通过转换那么自定义函数或者是数组

或者是迭代器文件的方式它们转换成数组

首先我们来看第一种方式

那我们通过给array函数传递python的序列对象来创建数组

如果传递多层嵌套的序列呢将创建多维数组

我们来看当然使用numpy之前呢

我们必须也要通过import

导入我们的numpy这个第三方库

然后下面我们可以定义一个序列

然后我们通过numpy.array把这个序列转换成

一个NDarray这样的一个数组

如果我们给的数组是两维的或者是更多维的时候

他就可以转换成多维的数组

刚才这个方式呢创建序列后那是通过array函数

将它转换成数组的他这个效率上的不是很高

因此呢numpy提供了很多的专门用来创建数组的函数

比如说numpy.arange这样的一个函数

这个函数是可以产生一个序列的

那么第一个参数是开始第二参数终止值

最后一个步长

这个呢就是从0开始而终止值是1

步长是0.1那这个呢

通常的arange这个函数通常是左闭右开的

那么也就是不包括最后一个不包括一的

那么产生的是从零到零点九十个这样的数据

构成我们的一个arange数组

也可以通过其他的一些函数

比如说linspace这个函数也是零一

那么这个是这个linspace这个后面第三个参数

它是元素的个数那么他可以带一个参数

endpoint如果是true的话

那就包含我们的终止值

所以产生三个的话

他们就是零二零点五和一

那这样就构成了我们这个产生的numpy的数组

也可以通过zeros one empty这样的函数来创建

创建指定形状的数组的类型

比如说我们通过numpy.zeros 那么这个呢

给定数组的什么啊前面是给数组的大小

后面的各一个可以给定数组的类型

就会产生一个零是由四行三列组成的

这样的一个数组numpy.ones那么是产生的是

都是一的这样一个数组

同理我们前面的知识我们数组的大小后面是数组的类型

那么产生一个都是一组成的三行四列的这样一个数字。

那么第三种方式我们创造创建numpy数组

可以通过

那么它是可以通过从字符串文件迭代器和自定义函数来创建

我们首先来看这个fromstring那么这个第一个参数

我们就给一个字符串然后第二个参数是他的类型

那么第三个算是他的风格方式

那么是以空格分方式分隔

那么我们就可以把这个转换成一个array

那也可以我们给一个迭代器

那么迭代器的方式是这样子的

我们forx他可以从range5从0取到4

输出X平方这样的一个迭代器

把这个迭代器转换成numpy.的数组

我们通过fromiter来去转换那么它转换的数组呢

就是这样子的零一的平方

二的三的到四的平方这样的一个数组

我们还可以从指定的文件里面给定的数据

来转换成我们的array数组

那么这个呢是给定了这样那个文件

文件里面的内容的就是指有123456

分隔符是用逗号分隔的

也可以通过这样的fromfile把它转换成我们的array

另外一种方式呢

是我们给定一个函数

我们定义了个自定义函数func那么返回的结果呢

就是我们给定的值与4的膜加1

他们通过numpy.

应用这个函数后面这个参数呢是我们要输出的

数组的元素的个数那么是10

那么这个参数也要用它这个里面的取的时候

是从零到九个那么零到九个

那么分别于4的膜然后加1

我们得到的这个结果

就是我们有十个元素组成的这个数组

那还可以呢我们通过lambda函数来建数组

那像我们这样给一个lambda函数i j

结果输出是I与J是否相等

那么数组的大小呢

是33类型是整形所以呢这样的话通过这个函数

因为这个关系表达式我们可以看得到

所以他的结果是一个得到array是一个true from

也就是我们的布尔类型的

那么需要说明的我们这里面可以通过数组名称点dtype

来获得数组元素的类型

通过点shape来获得它的大小也可以通过

reshape来去修改我们的数组的形状

我们可以看到这是我们刚才生成的一个

是一个数组是什么类型什么大小

我们可以通过点shape和点dtype来去获得

他这个数组类型是布尔类型的

数组的大小呢可以通过点shape去获

那么reshape就是我们可以看

刚才我们输出这个数组三行三列的

我们也可以把它转换成一行九列的

那么这个是可以转换成是这样的数组

我们可以看他就把他这个把我们三乘三的这个数组

把它转换成一行九列的这样的一个数组

这个数组转换的时候要注意元素肯定是不能少的

那么这个比如说你六个元素转换出来也还是六个

两行三列可以转成三行两列

ndarray数组的存取

我们通常使用三种方式

下标切片

整数序列下标

和布尔数组下标的方式

进行对np.数组的存取

np.数组的存取方法和python的标准方法是一致的

我们看下面这段代码

通过np.arange方法生成零到九的一个数组

那我们要访问的时候

第五个元素我们可以用a5来进行访问

我们也可以访问某一个片段

那就说从三至五的这个切片的话

我们可以写a3:6

他遵循左闭右开的这个原则

那与Python列表不同的是

通过下标范围获取新的数组是

原始数组的一个视图

它与原始数据共享图一块儿出去空间

我们也来看下面这段代码

我们首先输出我们刚才生成的这个数组由零到九组成

我们现在把切片从a:7

那么也就是说下标为4-6的元素赋值给b

我们在输出这个b的元素

b下标为2的这个元素

然后我们把它进行修改

修改再输出我们把b的数组和a的数组

我们观察它的值发现

我们改了b下标为2的这个值

a里面元素原来对应的他那个下标为6的元素的值

也发生了变化

这就说明他b和a是共享同一块数据存储空间的

那么如果不想让他共享同一块存储空间的话

我们可以使用整数序列下标

来对数组元素进行存取

那我们也看右边的这段代码

如果我们把a下标4567的这个元素赋值给b的时候

如果用这样的方式的时候我们可以看的到

我们同样显示下标为2b的元素

他的值然后呢我们再给他进行修改

那么修改以后呢

我们在输出a的元素b的元素

我们发现我们可以看a的元素还是原来的这个元素

那么b的元素呢我们修改以后呢下标为2的这个元素

就是我们新的修改值

这就说明a和b数组他们自己有独立的存储数据空间

第三种方式我们可以通过布尔数组下标

来进行对数组进行访问

新的数组和原来的数组是不共享数据空间的

需要注意的是

这种方式只应用于波尔数组不属于于布尔列表

一样我们来可以看到还是我们生成的这个数组a

如果我们生成一个数组新的又生成一个数组a

那么输出以后这个数组的是零到九

我们把a里面的这个下标写成TrueFalse来赋值给b

那这时候呢那么True我们可以看的下标为0的

下标为2的下标为4的

那TrueFalse也就是把下标为True的值的元素复制给b

我们输出b以后我们可以看的到第一个是True

那么第二个第三个True第四个第五个是True

然后第六个第七个是True

然后最后两个True

那我们可以看的到这个就是我们b生成的数组生成

赋值以后得到新的b的数组元素的组成

一样我们修改b里面下标为02的这个元素给它赋值为0

那么原来是4的元素其实就改成了零

一样输出a的数组的元素和b的数组元素

我们发现只改变了b数组的元素

也就说明a和b虽然b通过a赋值给b了

那么它们的使用的数据空间是独立的

对于多维数组

我们需要说明他多维数组和我们一维数组的存取是类似的

因为多维数组有多个轴因此他下标需要多个数值来表示

那么NumPy采用组元作为数组的这个下标

unicersal function 的缩写就是ufunc函数

有时候把它称之为ufunc运算

它是一种能对数组的每个元素进行操作的函数

那么这些函数有许多我们可以通过

np.函数的名称来去获得np.abs呢

那下面就给我们解释这个函数是如何使用的

那也给我们会有一个例子

我们可以看到通过np.array

我们首先创建了一个数组x

然后呢我们通过函数

np.absolutex来求他的绝对值

能得到的结果就是对数组里面的每个元素求了绝对值

NumPy内置了许多的ufunc的函数

都是在C语言级别实现的

因此他们的计算的速度非常的快

我们来看这段代码

首先我们导入了time包和我们的NumPy

那么在这个里面的话我们前面讲过通过

linspace来去生成一个0开始

那么中值是10生成了一百万个这样的一个数据组成的数组

这个time.perfcounter是获得一个时间

那么求这个数组里面每个元素他的sin值

通过np.sin来就获得这个y的数组

最后我们输出一下这个计算后的时间差

也就说我们可以看的到输出了这一百万个元素

求了他的sin值以后用的时间是0.03秒

那么用常用的math.sin.的时候呢

他用的时间又是多少呢

我们来看前面生成的方法一样

我们只不过在这个地方用的时候通过math.sin

去对每一个生成的x数组里面的元素进行求他的sin值

那么在这个运行以后

我们可以看到他用的时间是0.83秒

我们用Numpy的sin求数组的sin值和

用这个math.sin来求出他的sin值

我们可以看他的差别是数十倍的

Numpysin为了同时支持数组和单个值的计算

其C语言的内部实现是要比math.sin复杂了很多

Numpy.sin对数组计算比math.sin要快数十倍

我们刚才从那个例子上也可以看到

这个呢主要得力于

Numpysin在C语言级别上的这个循环的计算

Numpysin同样也支持对单个数值求正弦

不过对单个数的计算math.sin比Numpysin要快得多

所以我们如果对一个数组求正弦的时候呢

我们就Numpysin

如果我们只求一个的时候最好用mathsin

Numpy中使用

比较符对两个数字进行比较

比如说我们这个等号的比较符和大于号的比较符

那么他呢比较后能返回一个布尔数据

那他的每个元素的值都是两个数组

对应这个元素的比较的结果

比如我们可以看下面这个例子里面np

前面的数组和后面那个数组

那么他比较的结果也是一个数组

那其实呢后面这个元素是不是大于三十个大于True

那么2是不是大于False1是大于3False

这个是我们Numpy数组的布尔运算

那在Python中的布尔运算的还使用了

and or not这些的关键字

Numpy中无法被重载

因此Numpy数组的布尔运算只

通过相应的ufunc函数呢来进行

这些呢函数名都以logical下杠来开头的

我们也看这个例子

创建个a,b这样的一个数组

那么看np.logical杠or那么就是用的or的预算

这里面的我们看a这个数组和b这个数组是不是相等

或者是a大于b

其实他是执行这样的一个数组的一个比较

那得到的结果也是一个数组

我们看这个元素a数组里面的元素大于b或者等于b

那么是False那么第二个呢是等于所以是True

第三个呢是大于所以他也是True

我们需要注意的是

就是布尔数组也可以通过ufunc来产生

我们可以看到可以通过np.random.rand来产生一个数组

产生一个数组那么这个数组是什么

0到1之间的数

那么是有五个

那么这样的话

那我们可以再通过比较符

这个数组是不是大于0.5

把他比较的结果给C

C得到的结果也是一个数组

因为比较符得到的布尔值

所以我们得到的这个数组就是布尔的一个数组

FalseTrueFalseTrue这样一个数组

计算思维与人工智能基础课程列表:

第一部分:计算思维

-1.计算思维的提出

-2.计算思维的要素与应用

-3.培养计算思维

-4.智能时代的教师与教学

-章测试

第二部分:人工智能

-1.人工智能的发展

-2.人工智能的实现与机器学习

-3.人工智能产业

-章测试

第三部分:python基础

-第一章:python简介

--1.1python的介绍

--1.2.anaconda的安装

--章测试

-第二章:编码规范

--2.1 python编码规范

--2.2常量和变量

--章测试

-第三章:数据类型

--3.1数据类型概述

--3. 2.数据转换

--3.3数据类型区别

--章测试

-第四章:基本运算

--4.1.基本运算符

--4.2比较运算符

--4.3逻辑运算符

--4.4位运算符

--4.5成员运算符与身份运算符

--4.6运算符的优先级

--章测试

-第五章:程序控制结构

--5.1顺序结构

--5.2条件结构

--5.3循环结构

--5.4跳转结构

--5.5异常处理

--章测试

-第六章:函数、模块与面向对象

--6.1函数的定义与调用

--6.2面向对象

--6.3魔法函数的应用

--6.4模块与包

--章测试

-第七章:文件操作

--7.1文件的打开与读取

--7.2文件的写入

--7.3CSV模块的应用

--章测试

-第八章:python生态库

--8.1第三方库的安装

--8.2标准库-Os库与Sys库

--8.3.标准库-Time库

--8.4标准库-Random库

--8.5标准库-Turtle库

--8.6第三方库-词云库

--8.7第三方库-pyinstaller库

--8.8第三方库-numpy库(上)

--8.9第三方库-numpy库(下)

--8.10第三方库-pandas库

--8.11第三方库-matplotlib库

--章测试

-第九章:TensorFlow基础

--9.1TensorFlow简介

--9.2TensorFlow 2.0的改进

--9.3TensorFlow的数据应用

--9.4 TensorFlow的设备应用

--9.5.TensorFlow中常用操作

--章测试

-第十章:实例分析与实践

--10.1认识回归问题

--10.2房价的预测

--10.3手写数字识别

--10.4卷积神经网络的介绍

--10.5全连接网络的搭建

--10.6卷积神经网络的实现服饰图片的分类

--10.7LeNet的介绍

--章测试

-第十一章:人工智能在自然语言中的应用

--11.1自然语言处理

--11.2命名实体识别技术

--11.3词向量表示

--11.4自然语言处理的挑战及应用

--章测试

8.8第三方库-numpy库(上)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。