https://www.runoob.com/scipy/scipy-tutorial.html
SciPy 教程
SciPy 是一个开源的 Python 算法库和数学工具包。
Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用 Scipy。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
SciPy 应用
Scipy 是一个用于数学、科学、工程领域的常用软件包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。 。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
NumPy 和 SciPy 的协同工作可以高效解决很多问题,在天文学、生物学、气象学和气候科学,以及材料科学等多个学科得到了广泛应用。
SciPy 安装
本章节,我们使用 pip 工具来安装 SciPy 库,如果还未安装该工具,可以参考 Python pip 安装与使用。
升级 pip:
python3 -m pip install -U pip
安装 scipy 库:
python3 -m pip install -U scipy
安装完成后,我们就可以通过 from scipy import module 来导入 scipy 的库:
constants 是 scipy 的常量模块。
以下实例,我们通过导入 scipy 库,然后查看 scipy 库的版本号:
实例
print(scipy.__version__)
SciPy 模块列表
以下列出了 SciPy 常用的一些模块及官网 API 地址:
模块名 | 功能 | 参考文档 |
---|---|---|
scipy.cluster | 向量量化 | cluster API |
scipy.constants | 数学常量 | constants API |
scipy.fft | 快速傅里叶变换 | fft API |
scipy.integrate | 积分 | integrate API |
scipy.interpolate | 插值 | interpolate API |
scipy.io | 数据输入输出 | io API |
scipy.linalg | 线性代数 | linalg API |
scipy.misc | 图像处理 | misc API |
scipy.ndimage | N 维图像 | ndimage API |
scipy.odr | 正交距离回归 | odr API |
scipy.optimize | 优化算法 | optimize API |
scipy.signal | 信号处理 | signal API |
scipy.sparse | 稀疏矩阵 | sparse API |
scipy.spatial | 空间数据结构和算法 | spatial API |
scipy.special | 特殊数学函数 | special API |
scipy/stats | 统计函数 | stats.mstats API |
更多模块内容可以参考官方文档:https://docs.scipy.org/doc/scipy/reference/
SciPy 常量模块
SciPy 常量模块 constants 提供了许多内置的数学常数。
圆周率是一个数学常数,为一个圆的周长和其直径的比率,近似值约等于 3.14159,常用符号 来表示。
以下实例输出圆周率:
实例
print(constants.pi)
执行以上代码,输出结果如下:
3.141592653589793
以下实例输出黄金比例:
实例
print(constants.golden)
执行以上代码,输出结果如下:
1.618033988749895
我们可以使用 dir() 函数来查看 constants 模块包含了哪些常量:
实例
print(dir(constants))
执行以上代码,输出结果如下:
['Avogadro', 'Boltzmann', 'Btu', ...]
单位类型
常量模块包含以下几种单位:
SciPy Matlab 数组
NumPy 提供了 Python 可读格式的数据保存方法。
SciPy 提供了与 Matlab 的交互的方法。
SciPy 的 scipy.io 模块提供了很多函数来处理 Matlab 的数组。
以 Matlab 格式导出数据
savemat() 方法可以导出 Matlab 格式的数据。
该方法参数有:
- filename - 保存数据的文件名。
- mdict - 包含数据的字典。
- do_compression - 布尔值,指定结果数据是否压缩。默认为 False。
将数组作为变量 "vec" 导出到 mat 文件:
实例
import numpy as np
arr = np.arange(10)
io.savemat('arr.mat', {"vec": arr})
注意:上面的代码会在您的计算机上保存了一个名为 "arr.mat" 的文件。
导入 Matlab 格式数据
loadmat() 方法可以导入 Matlab 格式数据。
该方法参数:
- filename - 保存数据的文件名。
返回一个结构化数组,其键是变量名,对应的值是变量值。
以下实例从 mat 文件中导入数组:
实例
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# 导出
io.savemat('arr.mat', {"vec": arr})
# 导入
mydata = io.loadmat('arr.mat')
print(mydata)
返回结果如下:
{
'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Sep 22 13:12:32 2020',
'__version__': '1.0',
'__globals__': [],
'vec': array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
}
使用变量名 "vec" 只显示 matlab 数据的数组:
实例
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# 导出
io.savemat('arr.mat', {"vec": arr})
# 导入
mydata = io.loadmat('arr.mat')
print(mydata['vec'])
返回结果如下:
[[0 1 2 3 4 5 6 7 8 9]]
从结果可以看出数组最初是一维的,但在提取时它增加了一个维度,变成了二维数组。
解决这个问题可以传递一个额外的参数 squeeze_me=True:
实例
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# 导出
io.savemat('arr.mat', {"vec": arr})
# 导入
mydata = io.loadmat('arr.mat', squeeze_me=True)
print(mydata['vec'])
返回结果如下:
[0 1 2 3 4 5 6 7 8 9]