一、概述
SciPy是一个开源的Python科学计算库,它建立在NumPy之上,提供了许多有用的科学计算功能。SciPy包括各种科学计算模块,如线性代数、优化、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理等。SciPy库的主要特点是其高效性和易用性。
常见模块
模块名 | 功能 | 参考文档 |
---|---|---|
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 |
二、SciPy常数与特殊函数
2.1 数学常数
import scipy.constants as C
print("π = ", C.pi)
print("e = ", C.e)
print("自然对数的底数 = ", C.golden)
2.2物理常数
常见的常数:
- constants.c:真空光速
- constants.h:普朗克常数
- constants.G:牛顿引力常数
- constants.g:标准重力加速度
- constants.e:基本电荷
- constants.m_e:电子质量
- constants.m_p:质子质量
- constants.m_n:中子质量
更多常量请看SciPy 常量模块
2.3 特殊函数(scipy.special)
scipy.specail模块包含了少量实用的函数,同时还包含很多基础的数学函数,比如贝塞尔基函数、椭圆函数、统计函数的基础函数、超几何函数、正交多项式、开尔文函数、伽玛相关函数等等。大多数是比较基础的函数,通常我们直接使用的较少。
实用函数
- special.round(x):四舍五入为最接近的整数
- special.cbrt(x):求立方根
- special.sindg(x):角度x(单位为度)的正弦
- special.cosdg(x):角度x(单位为度)的余弦
- special.tandg(x):角度x(单位为度)的正切
- special.cotdg(x):角度x(单位为度)的余切
from scipy import special
x = 5.2
# 四舍五入为最接近的整数
print(special.round(x))
# 求立方根
print(special.cbrt(x))
# 角度x(单位为度)的正弦
print(special.sindg(x))
# 角度x(单位为度)的余弦
print(special.cosdg(x))
# 角度x(单位为度)的正切
print(special.tandg(x))
# 角度x(单位为度)的余切
print(special.cotdg(x))
特别函数
- special.gamma(z):伽玛函数。伽玛函数是阶乘函数在实数和复数系上的扩展
- special.gammaln(z):伽玛函数的对数
- special.beta(a,b):贝塔函数
- special.betaln(a,b):贝塔函数
- special.ellipj(u,m):雅可比椭圆函数
- special.euler(n,x):欧拉数计算
- special.binom(n,k):二项式系数
- special.sici(x):正弦和余弦的积分
2.4 输入输出(scipy.io)
2.4.1 matlab数据文件
mditc = io.loadmat(file):加载.mat类型的matlab文件。返回字典mdict,key为变量名
io.savemat(file, mdict):把mdict字典数据保存到matlab格式的.mat文件
io.whosmat(file):列出matlab格式的.mat文件中的变量。
2.2 wav声音文件
rate,data = io.wavfile.read(file):打开wav声音文件。rate为采样频率,data为数据
io.wavfile.write(file, rate, data):写入一个简单的未压缩的wav文件
2.5 Matlab 数组
转换
import numpy as np
mat = np.matrix('1,2;3,4')
mat
单位矩阵
import numpy as np
import numpy.matlib
mat1 = np.matlib.identity(5)
mat1
转置
import numpy as np
import numpy.matlib
mat = np.matrix('1,2;3,4')
print(mat)
print(mat.T)
数乘
np.multiply()
函数用于让两个矩阵同样位置的元素相乘。因此,mat3 = np.multiply(ma, ma1)
表示将矩阵ma
和ma1
中同样位置的元素相乘,得到一个新的矩阵mat3
。
#mat2 = mat1*2
mat2 = np.multiply(4,mat1)
mat3 = np.multiply(mat2,mat1)#矩阵位乘
mat3
矩阵加法
import numpy as np
import numpy.matlib
ma = np.matrix('1,2;3,4')
ma1 = np.matrix('3,4;1,2')
#ma+ma1
print(np.add(ma, ma1))
矩阵乘法
import numpy as np
import numpy.matlib
ma = np.matrix('1,2;3,4')
print(ma)
ma1 = np.matrix('3,4;1,2')
print(ma1)
# ma*ma1
mat3 = np.dot(ma, ma1) # 矩阵相乘
mat3
矩阵的逆
import numpy as np
import numpy.matlib
ma = np.matrix('1,2;3,4')
ma.I
三、插值与拟合
插值和拟合是数学中的两个重要概念。插值是指通过已知数据点求出一个函数,使得这个函数在已知数据点上的函数值与已知数据点上的函数值相等。而拟合是指通过已知数据点求出一个函数,使得这个函数在已知数据点上的函数值与已知数据点上的函数值的差的平方和最小
3.1插值法
原理
3.1.1单变量插值, 一维插值interpld()
interp1d函数是SciPy库中interpolate模块中最常用的插值函数之一。它可以根据给定的数据点和插值方法,返回一个可调用的函数对象,该对象可以用于估计新点的值。interp1d函数的详细参数如下
scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)
其中,x和y是一维数组,表示要进行插值的数据点。kind是指定插值方法的字符串参数,可以取值为’linear’、‘nearest’、‘zero’、‘slinear’、‘quadratic’、‘cubic’。bounds_error是一个布尔型参数,表示是否在超出插值范围时引发异常。fill_value是一个浮点型参数,表示在超出插值范围时要使用的填充值,assume_sorted参数是一个布尔型参数,表示输入的x数组是否已经按升序排列。
- kind:指定插值的样条曲线的阶数,可以是’linear’(线性),‘nearest’(最近邻),‘zero’(零阶),‘slinear’(一阶样条),‘quadratic’(二阶样条),‘cubic’(三阶样条)等。
import numpy as np
from scipy import interpolate as intp
import matplotlib.pyplot as plt
# 生成等差数列,从0到4,共12个数
x = np.linspace(0,4,12)
# 计算cos(x^2/3+4)的值
y = np.cos(x**2/3+4)
print (x)
print (y)
# 画出散点图
plt.plot(x,y,"o")
# 画出平滑曲线
f = intp.interp1d(x,y,kind="cubic")
xnew = np.linspace(0,4,30)
ynew = f(xnew)
plt.plot(xnew,ynew,"-")
plt.show()