SciPy简单应用
SciPy是在NumPy的基础上增加了大量用于数学计算,科学计算以及工程计算的模块,包括线性代数,常微分方程求解,信号处理,图像处理于稀疏矩阵等。参考文档
目录
SciPy主要模块如下表:
模块 | 说明 |
---|---|
scipy.cluster |
向量计算 / Kmeans |
scipy.constants |
物理和数学常量 |
scipy.fftpack |
傅里叶变换 |
scipy.integrate |
积分程序 |
scipy.interpolate |
插值 |
scipy.io |
数据输入和输出 |
scipy.linalg |
线性代数程序 |
scipy.ndimage |
n-维图像包 |
scipy.odr |
正交距离回归 |
scipy.optimize |
优化 |
scipy.signal |
信号处理 |
scipy.sparse |
稀疏矩阵 |
scipy.spatial |
空间数据结构和算法 |
scipy.special |
一些特殊数学函数 |
scipy.stats |
统计 |
他们全都依赖于numpy, 但是大多数是彼此独立的。导入Numpy和Scipy的标准方式:
import numpy as np
from scipy import stats # 其他的子模块类似
文件输入/输出:scipy.io
- 载入和保存matlab文件:
from scipy import io as spio
a = np.ones((3, 3))
spio.savemat('file.mat', {
'a': a}) # savemat expects a dictionary
data = spio.loadmat('file.mat', struct_as_record=True)
data['a']
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
- 载入文本文件
numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)
from io import StringIO # StringIO behaves like a file object
import numpy as np
c = StringIO(u"0 1\n2 3")
print(np.loadtxt(c))
[[0. 1.]
[2. 3.]]
d = StringIO(u"M 21 72\nF 35 58")
np.loadtxt(d, dtype={
'names': ('gender', 'age', 'weight'), # dtype指定解析出来的数据类型
'formats': ('S1', 'i4', 'f4')})
array([(b'M', 21, 72.), (b'F', 35, 58.)],
dtype=[('gender', 'S1'), ('age', '<i4'), ('weight', '<f4')])
c = StringIO(u"1,0,2\n3,0,4")
"""
delimiter指定文件中数据之间的分隔符
usecols 指定读取文件中的哪些列,在下面的函数中,usecols=(0,2)表示只读取文件的第1、3列
unpack:读出来的数据是否需要解包,注意接受函数的变量个数要与读出来的行数或列数吻合
"""
x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True)
x
array([1., 3.])
y
array([2., 4.])
特殊函数:scipy.special
常用的一些函数如下:
- 贝塞尔函数,比如scipy.special.jn() (第n个整型顺序的贝塞尔函数)
- 椭圆函数 (scipy.special.ellipj() Jacobian椭圆函数, …)
- Gamma 函数: scipy.special.gamma(), 也要注意 scipy.special.gammaln() 将给出更高准确数值的 Gamma的log。
- Erf, 高斯曲线的面积:scipy.special.erf(),也叫误差函数