Python SciPy
🍦 SciPy是在底层使用NumPy的科学计算库,为优化、信号处理等提供实用功能,由NumPy创建者Travis Olliphant创建。
1 SciPy
- SciPy
- 命令窗口下使用
pip install scipy
进行安装。 - 通过import关键字将其导入应用程序:
import scipy
。 - 检查SciPy版本,版本字符串存在
__version__
属性下。
- 命令窗口下使用
1 |
|
2 常量
- 常量
- PI是科学常数的一个例子,
dir()
函数可以看到常量模块下所有单元的列表。 - 单位类别
- 质量:返回以kg为单位的指定单位。
- 时间:返回以秒为单位的指定单位。
- 长度:返回以米为单位的指定单位。
- 角度:返回以弧度为单位的指定单位。
- 热量:返回以焦耳为单位的指定单位。
- 功率:返回以瓦特为单位的指定单位。
- 力量:返回以牛顿为单位的指定单位。
- 压力:返回以帕斯卡为单位的指定单位。
- 区域:返回以平方米为单位的指定单位。
- 体积:返回以立方米为单位的指定单位。
- 速度:返回以米每秒为单位的指定单位。
- 温度:返回以开尔文为单位的指定单位。
- 二进制:返回以字节为单位的指定单位。
- 公制(SI):返回以米为单位的指定单位。
- PI是科学常数的一个例子,
1 |
|
2-1 质量与时间
1 |
|
2-2 长度与角度
1 |
|
2-3 热量与功率
1 |
|
2-4 力量与压力
1 |
|
2-5 区域与体积
1 |
|
2-6 速度与温度
1 |
|
2-7 二进制与公制
1 |
|
3 优化器
- 优化器
- 在SciPy中定义的一组过程,找到函数的最小值,或找到方程的根。
- NumPy能够为多项式和线性方程求根,但是不能为非线性方程求根。
- 例如:
x+cos(x)
,使用SciPy的optimize.root功能,接受两个必需的参数。- x0,对根的初始猜测。
- fun,表示方程的函数。
- optimze.root返回一个对象,其中包含有关解决方案的信息。
- 最小化函数
- 非线性方程下一个函数代表一条曲线。
- 曲线有高点和低点,高点称为最大值,低点称为最小值。
- 整个曲线的最高点称为全局最大值,其余的称为局部最大值。
- 整个曲线的最低点称为全局最小值,其余的称为局部最小值。
- 使用
scipy.optimize.minimize()
来最小化函数,接受以下参数。- x0(根的初始猜测)、fun(方程函数)、options(定义额外参数的字典)、callback(每次优化迭代后调用的函数)。
- method(表示要使用的方法名称,例如:
CG
、BFGS
、Newton-CG
、L-BFGS-B
、TNC
、COBYLA
、SLSQP
)。
1 |
|
4 稀疏数据
- 稀疏数据
- 具有大部分未使用元素的数据,元素不携带任何信息。
- 稀疏数据:即表示大多数项目值为0的数据集。
- 密集数组:与稀疏数组相反,大多数值不为0。
- 科学计算中处理线性代数的偏导数时会遇到稀疏数据。
- SciPy有一个scipy.sparse模块,用于处理稀疏数据,主要使用两种类型的稀疏矩阵。
- CSC:压缩稀疏列。
- CSR:压缩稀疏行,通过将数组传递给
scipy.sparse.csr_matrix()
函数来创建。
- 还可以使用data属性,用于查看存储的数据,
count_nonzero()
方法可以计算非零数。 eliminate_zeros()
方法从矩阵中删除零条目,sum_duplicates()
方法则消除重复条目。tocsc()
方法从CSR类型转换为CSC类型,稀疏矩阵同样还支持普通矩阵支持的所有操作。
- 具有大部分未使用元素的数据,元素不携带任何信息。
1 |
|
5 图表数据
- 图表数据
- 使用scipy.sparse.csgraph模块处理图表数据结构。
- 邻接矩阵:Adjacency Matrix,表示顶点之间相邻关系的矩阵。
- 通过
connected_components()
方法查找所有连接的组件。 - 迪杰斯特拉:通过
dijkstra()
方法在图中找到从一个元素到另一个元素的最短路径。- limit(路径的最大权重)、indices(元素的索引,仅返回该元素的所有路径)。
- return_predecessors(即布尔值,True将返回整个遍历路径,否则为False)。
- 弗洛伊德·沃歇尔:
floyd_warshall()
方法可找到所有元素对之间的最短路径。 - 贝尔曼福特:
bellman_ford()
方法找到所有元素对之间的最短路径,也可处理负权重。 - 深度一阶
depth_first_order()
方法从节点返回深度优先遍历。- 这一方法采用了两个参数,即图表和遍历图的起始元素。
- 广度优先顺序
breadth_first_order()
方法从节点返回广度优先遍历。- 这一方法采用了两个参数,包括图表和遍历图的起始元素。
- 通过
1 |
|
6 空间数据
- 空间数据
- 指在几何空间中表示的数据,例如坐标系上的点,SciPy提供了scipy.spatial模块。
- 三角测量:利用三角形计算多边形的面积,通过点生成三角部分的方法用
Delaunay()
。 - 凸包:覆盖了所有给定点的最小多边形,可以使用
ConvexHull()
方法进行凸包的创建。 - KDTrees:指针对最近邻查询优化的数据结构,有效地询问了哪些点最接近某个给定点。
KDTree()
:返回一个KDTree对象(K维空间)。query()
:返回最近邻点的距离和邻点的位置。
1 |
|
- 距离矩阵
- 两个向量之间的距离不仅可以是直线长度,还可以是它们与原点的夹角,或所需的单位步数等。
- 欧几里得距离:
euclidean()
。 - 余弦距离:是A和B两点之间的余弦角值,
cosine()
。 - 城市街区距离(曼哈顿距离):采用四方向移动计算的距离,
cityblock()
。 - 汉明距离:两位不同的位比例,测量二进制序列距离的方法,
hamming()
。
1 |
|
7 插值函数
- 插值函数
- 在给定点之间生成点的方法,例如点1和2,插值并找到点1.33和1.66。
- 机器学习中经常处理数据集中的缺失数据,插值通常用于替换这些值。
- SciPy的scipy.interpolate模块具有许多处理插值的函数。
- 一维插值:
interp1d()
,用于对具有1个变量的分布进行插值,点被拟合为曲线。 - 样条插值:
UnivariateSpline()
,点被拟合为一个叫样条多项式定义的分段函数。 - 径向基函数插值:使用
Rbf()
函数,径向基函数是对应固定参考点进行定义的函数。
- 一维插值:
1 |
|
8 Matlab数组
- Matlab数组
- SciPy提供了模块scipy.io,具有处理Matlab数组的功能。
savemat()
:以Matlab格式导出数据。- mdict(包含数据的字典)、filename(即保存数据的文件名)。
- do_compression(即布尔值,指定是否压缩结果,默认为假)。
loadmat()
:从Matlab文件中导入数据,filename则是必须参数。
1 |
|
9 显著性测试
- 显著性测试
- SciPy提供的scipy.stats模块,具有执行统计显著性检验的功能。
- 技术及关键字
- 统计学假设:关于总体参数的假设。
- 零假设:假设观察结果在统计上不显著。
- 替代假设:假设观察结果是由于某种原因,零假设的替代品。
- 一尾测试:当假设仅测试值的一侧时,称为单尾检验。
- 二尾测试:当假设正在测试值的两侧时,称二尾测试。
- 阿尔法值:Alpha值是显著性水平。
- P值:数据实际与极端的接近程度。
- 如果P值<=Alpha值,拒绝原假设并说数据具有统计显著性,否则接受原假设。
- T检验(双尾测试)
- 用于确定两个变量的平均值之间是否存在显著差异,是否属于同一分布。
ttest_ind()
:用两个相同大小的样本,生成一个t统计量和p值的元组。
1 |
|
9-1 KS测试
- KS测试
- KS测试用于检查给定值是否服从分布,可以用作一尾或二尾测试,默认情况下是两个尾的。
kstest()
将要测试的值和CDF作为两个参数,CDF可以是字符串或返回概率的可调用函数。
1 |
|
9-2 统计描述
- 统计描述
- 可使用
describe()
函数来定义统计描述,用于查看数组中值的摘要。 - 返回参数:观察次数、最小值和最大值、平均值、方差、偏度、峰度。
- 可使用
1 |
|
9-3 正态性检验
- 正态性检验
- 基于偏度和峰度,使用
normaltest()
函数返回原假设的p值。 - 偏度:数据对称性的度量,正态分布时是0,负数数据向左倾斜,正数数据向右倾斜。
- 峰度:衡量数据是重尾还是轻尾正态分布的度量,正峰度是重尾,负峰度则轻微拖尾。
- 基于偏度和峰度,使用
1 |
|
Python SciPy
https://stitch-top.github.io/2021/07/09/python/python08-python-scipy/