十二、Numpy中广播的概念
广播:
简单理解为用于不同大小数组的二元通用函数(加、减、乘等)的一组规则
广播的规则:
1. 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1
2. 如果shape的维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;
3. 如果shape的维度不匹配,但是没有任何一个维度是1,则匹配失败引发错误;
1. 二维数组加一维数组
2 .两个数组均需要广播
3. 不匹配的例子
十三、Numpy求解线性方程组
对于Ax=b,已知A和b,怎么算出x?
求解:
验证:
十四、Numpy实现SVD矩阵分解
从分量还原矩阵
十五、Numpy实现多项式曲线拟合
问题定义:
对于一堆数据点(x, y),能否只根据这些数据,找出一个函数,使得函数画出来的曲线和原始数据曲线尽量匹配?
多项式拟合问题:
任何可微连续的函数,都可以用一个N次多项式来估计,而比N次幂更高阶的部分为无穷小可以忽略不计
3次多项式即:a$x^3$ + b$x^2$ + cx + d
比如我们可以让sin(x) 约等于 a$x^3$ + b$x^2$ + cx + d
1. 构造原始数据
2. 使用Numpy拟合
十六、使用Matplotlib实现可视化绘图
可以直接将Numpy的数组传给Matplotlib实现可视化绘图:
- 曲线图
- 饼图
- 柱状图
- 直方图
1. 绘制正弦曲线
2. 绘制饼图
3. 柱状图
4. 直方图
十七、Numpy实现逆矩阵求解线性方程组
对于这样的线性方程组:
- x + y + z = 6
- 2y + 5z = -4
- 2x + 5y - z = 27
可以表示成矩阵的形式:
用公式可以表示为:Ax=b,其中A是矩阵,x和b都是列向量
逆矩阵(inverse matrix)的定义:
设A是数域上的一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。
使用逆矩阵求解线性方程组的方法:
两边都乘以$A^{-1}$,变成$A^{-1}$Ax=$A^{-1}$b,因为任何矩阵乘以单位矩阵都是自身,所以x=$A^{-1}$b
1. 求解逆矩阵
2. 验证矩阵和逆矩阵的乘积是单位矩阵
3. 验证线性方程组
十八、Numpy将数组写到文件
## Numpy怎样将数组读写到文件
本文档介绍的是Numpy以自己内建二进制的方式,将数组写出到文件,以及从文件加载数组;
如果是文本、表格类数据,一般使用pandas这个类库做加载和处理,不用numpy
几个方法:
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压缩的文件格式中
.npy和.npz都是二进制格式文件,用纯文本编辑器打开都是乱码
1. 使用np.save和np.load保存和加载单个数组
2. 使用np.savez和np.load保存和加载多个数组
3. 使用np.savez_compressed和np.load保存和加载多个数组到压缩格式文件
1. 使用np.save和np.load保存和加载单个数组
2. 使用np.savez和np.load保存和加载多个数组
3. 使用np.savez_compressed和np.load保存和加载多个数组到压缩格式文件
十九、Numpy的结构化数组
一般情况下,Numpy中的数组都是同样的数据类型,比如int、float;
这也是Numpy性能高效的原因,在内存中紧凑存储,读取非常快;
但是Numpy也可以记录异构数组,比如下面的数据:
姓名 | 年龄 | 体重 |
小王 | 30 | 80.5 |
小李 | 28 | 70.3 |
小天 | 29 | 78.6 |
1. 正常的Numpy数组的dtype值只有一个类型
2. 怎样使用Numpy表达异构数据
3. 针对异构数组的查询和操作
使用列表的方式查询一行
使用字典的方式查询一列
按条件查询
对单列做逐元素计算
最后的一言:
* 对于这种每列类型不同的“异构数据”,Pandas更擅长处理;
* 但我们还要学习一下Numpy结构化数组,不一定会使用它,但要能读懂别人的代码
二十、Numpy与Pandas数据的相互转换
Pandas是在Numpy基础上建立的非常流行的数据分析类库;
提供了强大针对异构、表格类型数据的处理与分析能力。
本次介绍Numpy和Pandas的转换方法:
- Numpy数组怎样输入给Pandas的Series、DataFrame;
- Pandas的Series、DataFrame怎样转换成Numpy的数组
将Numpy数组转换成Pandas的数据结构
将Pandas的数据结构转换成Numpy数组
* 方法1:.values()
* 方法2:.to_numpy()
用途:
比如Scikit-Learn的模型输入需要的是Numpy的数组
可以使用Pandas对原始数据做大量的处理后,将结果数据转换成Numpy数组作为输入
二十一、Numpy数据输入给Sklearn实现模型训练
Numpy的数组怎样与sklearn模型交互,包括训练测试集拆分、输入给模型、评估模型、模型预估对于大家自己的任务,可以提前处理成这样的Numpy格式,然后输入给sklearn模型
import numpy as np # 使用sklearn自带的数据集,这些数据集都是Numpy的形式 # 我们自己的数据,也可以处理成这种格式,然后就可以输入给模型 from sklearn import datasets # 用train_test_split可以拆分训练集和测试集 from sklearn.model_selection import train_test_split # 使用LinearRegression训练线性回归模型 from sklearn.linear_model import LinearRegression
1. 加载波斯顿房价数据集
2. 拆分训练集和测试集
3. 训练线性回归模型
4. 评估模型和使用模型