当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第八章:python生态库 > 8.9第三方库-numpy库(下)
Numpy的广播规则
广播是Numpy对不同形状的数组进行数值计算的方式
对数组的算术运算通常在相应的元素上进行
运算遵循以下规则
第一呢是让所有输入数组都像其中shape最长的数组看齐
shape中不足的补齐
第二是输出数组是由输入数组
shape的各个轴上的最大值来组成的
我们来看一个例子
我们现在有两个数组a四行三列的这样的一个数组
和b一行三列这样这个数组来进行加的运算
它们的形状是不一样的
是他们要进行运算的时候是遵循Numpy的广播规则
那么第一步呢是要把形状不同的b
他要进行拉伸而拉伸成跟a一样的
那么他就有四行三列这样子的
然后呢输出的这个形状的是遵循ab里面的shape
最大的行是有四行
列是有三列组成
所以这个结果呢
这时候就应该跟a的形状是一样的
让他们在计算中的具体的数据是怎么样取的呢
下面这个规则
如果输入的数组的某个轴和输出数组对应轴的长度相同
或者是其长度为1时
这个数组能够用来进行计算
否则的话就会出错
我们可以看我们给的这个数组呢
如果有一a那么b其实是给的
他现在是给的是一行三列
那么还有一种可能是可以给的是四行一列
他也可以进行运算是一或者是跟他是一样
否则的话他就会报错
不能及时用了广播规则也不能进行来计算的
那么第四点呢
我们可以当输入数组某个轴的长度为一时的
沿着此轴运算时
都用此轴上的第一组值
他们在这个取值的时候最后运算的时候
也许说b的这个值的话
他就是要沿着这个我们伸展的这个轴上面、
也就是行这个轴上面的要把它复制
复制跟第一行的元素是一样的来进行计算
我们来看一个例子
有一个a这样的它是由四行三列组成的
那么输出的元素是这样子
那么b可以输出来我们开只有一行三列这样组成
那么在要运行进行计算的时候
我们说做对他做加法和乘法的时候
他都是用运用到了Numpy的规则
首先把它拉伸成同样是四行三列
然后他的元素的组成就是123来复制
所以呢他做加的运算的时候相当于零
这一行跟他加那么第二行也是跟他加第三行跟他加
第四行也是跟他每个元素相加
那么得到了下面的这个数组
相乘的也是每一行的对应元素相乘
所以得到下面这样的一个结果
这就是我们Numpy规则的使用
Numpy中矩阵的运算
Numpy中包含了一个矩阵的模块
Numpy.matlib该模块中的函数返回的是一个矩阵
而不是一个ndarray的一个数组对象
他们都这个数组对象和Numpy的这个矩阵
都可以用于处理行列表示的数字元素
也就像我们的数组一样的
那么矩阵数组都是由数组元素组成的
那么用mat函数呢
转化为这个矩阵后呢
他可以进行一些线性代数的操作
比如说我们矩阵求逆呀
或者是矩阵的线性代数方程和求解都是可以使用
那么在都要通过mat函数进行转换
那么下面这个是我们常见的一些矩阵的运算
通过mat函数把这个一个数组把它转换成矩阵
mat a1 a2 然后这两个a1 a2就可以做一些矩阵的相乘
矩阵的点成以及矩阵的求逆转制
对某一列求和某一行求和或者是指定的某一个行列求和
以及求它的最大值等等
矩阵表达式的运算
我们在jupyter下看一下它的运算结果
矩阵的操作
我们在jupyter下看
首先我们通过np.array生成一个数组
然后完成一些矩阵的基本的运算
比如说我们的矩阵的转置
我们可以看到这是我们生存的这个数组对象123345678
这样的一个可以表示一个矩阵
那他就可以进行转制的运算
除了这个运算呢
他也可以对一些按照行求这个矩阵里面的最小值
也可以做一些按照行求最小
列求最小或者是做一个基本的矩阵的相乘
我们可以看到
他都可以正常运行的矩阵里面行的最小列的最小
以及所有元素里面的他最小值都可以
那么这个后面的我们这个输出的是
前面这个我们生成的a的矩阵
和我们现在这个c的矩阵
两个巨震的乘积而得到的一个结果
那也可以通过我们通过np.mat这个函数
来进行创建一个矩阵
创建的矩阵以后呢
他就可以做相应的点成乘积矩阵的相乘以及矩阵的点成
还可以做矩阵的求逆的运算
这就是特别的一个代数的运算
那么其他的像列求和
行求和以及指定的某一个列求和最大值都是可以完成的
我们运行一下
那他可以得到一个正常的结果
这是上面这个矩阵求得矩阵
后面的我们就可以按照他的转制
只是按照这个行求的最大值
列求的最大值以及某一个行的最大值
那么最后一个a10
最后一个是计算的指定列里面的最大值
那么这个指的是第二列的最大值
a10出来的第二列
相当于这一点的一个最大值
那么最后一个我输出的是
matrix这个a4这个矩阵里面所有行的最大值
那么这个所有行他只有两行
那也就是每一行的最大值
那么这个数组里面每一行的最大值对应的
这就是我们一些矩阵常用的运算
Numpy文件的交互
我们可以通过np.savetxt把指定的Numpy数组对象存储到文件中
这个文本文件可以是CSV文件也可以是text的文件
那我们通常用的CSV文件比较多
我们知道CSV是一个有结构的文本文件
那么它从数组的话会更好一些
它们存储的方式呢
就是通过savetxt
这样的后面可以带指定的格式和分割符
把我们的Numpy数组存入到文件中
那么也可以通过np.loadtet把我们指定文件的数据
取出存到我们一个unpack数组对象里面
也可以指定它的类型以及它的分隔符
如果我们这个unpack等于False的时候就存入到
一个np的数组对象里
如果是true的时候他读入的数据将分别写入不同的数组变量里
那我们也有一个简单的方式就可以我们unpack
可以很方便的把数组存入到一个文件里
也可以通过np.load来取这个文件
那么取个文件放到我们的速度变量里面就可以了
我们看一下在jupyter文件的存取的简单的应用
我们首先来看通过np.loadtxt来去从文本文件里面
读取数据存入到一个x的np数组中
我们来看一下test下面这个01点的这个文本文件
它是里面存储的数据是这样子
第一行是一个字符串
那么第二行第一列也是一个字符串
那么只有这部分才是数值
所以我们要只可以把数值存入到我们numpy的数组里面
所以我们读入进来以后可以带通过一个dkiprows
来跳过我们的第一行
那么usecols是我们要使用的第一第二第三列
那么也就把第零列要剔除掉
所以我们读进来的这个np数组的数据
就是零一tet文件中数值的部分
我们运行一下可以看的到
与我们这个那么读进来的就是我们的数值的这一步
另外呢我们可以看
下面这一个是我们通过
np.array生成了一个数组对象
然后通过savetet来把我们这个a这个数组
存到指定的路径下的文件里面
取名a.csv
后面的mt是他的格式是浮点数
分隔符是空格
存入了以后呢
我们后面通过loadtxt把它取出
那我们这个里面分隔符还是空格
这个里面的unpack是我们只是把它取出来
放到一个数组对象里面
运行以后我们可以看到这个就是我们刚才存进去的是123
只不过我们的格式是浮点数
所以他取出来的时候
这个array里面的值就变成一点二点
就是浮点数浮点类型的数据了
下面给大家会介绍到这个matplotlib这个第三方库
那么他是一个画图的
我们可以只看这一句
就是我们通过matplot.csv这个文件
里面的数据读进来以后load取进来以后放到xy
分别放到两个数组对象里面
那么这样的话就可以通过x轴y轴来进行画图
运行以后我们可以看到
可以把画出来x坐标y坐标可以换这个直线图
那么这个matplot.csv里面的数据是什么样子的呢
我们可以看到他应该是这样一列这样一列
所以他们分别对应的x这一列
那么这一列是对应的y来存放数据
那这就是我们numpy中文件的交互的一个简单的应用
好
我们这节课的内容就到这
-章测试
-章测试
-第一章:python简介
--章测试
-第二章:编码规范
--2.2常量和变量
--章测试
-第三章:数据类型
--章测试
-第四章:基本运算
--4.2比较运算符
--4.3逻辑运算符
--4.4位运算符
--章测试
-第五章:程序控制结构
--5.1顺序结构
--5.2条件结构
--5.3循环结构
--5.4跳转结构
--5.5异常处理
--章测试
-第六章:函数、模块与面向对象
--6.2面向对象
--6.4模块与包
--章测试
-第七章:文件操作
--7.2文件的写入
--章测试
-第八章:python生态库
--章测试
-第九章:TensorFlow基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试