模块名
功能说明
cluster
层次聚类模块,包含矢量量化,
k-means
算法等
constants
数学科学常量模块,里面提供了大量数学科学常量
fftpack
快速傅里叶变换模块,可以进行
FFT/ DCT/ DST
等操作
integrate
积分模块,求多重积分、高斯积分、解常微分方程等
interpolate
插值模块,提供各种一维、二维、
N
维插值算法,包括
B
样条插值、
径向基函数插值等
io
IO
模块,提供操作多种文件的接口,如
matlab
文件、
IDL
文件、
Wav
(音频)文件、
ARFF
文件等。
misc
图像操作模块,提供图像打开保存、翻转,旋转,剪裁等操作
linalg
线性代数模块,提供各种线性代数中的常规操作
ndimage
多维图像处理模块
optimize
优化模块,包含各种优化算法。用来求有
/
无约束的多元标量函数最小值算法、最
小二乘法,求有
/
无约束的单变量函数最小值算法,还有解各种复杂方程的算法
signal
信号处理模块,包括样条插值,卷积,差分等滤波方法,
FIR/IIR
滤波,中值、排
序、维纳、希尔伯特等滤波器,各种谱分析算法等
sparse
稀疏矩阵模块,提供了大型稀疏矩阵计算中的各种算法
spatial
空间结构模块,提供了一些空间相关的数据结构和算法,如
Delaunay
三角剖分,
共面点,凸包,维诺图,
KD
树等
special
特殊函数模块,包含有各种特殊的数学函数,可以直接调用,如立方根方法、指
数方法、
Gamma
方法等
stats
统计模块,提供了一些统计学上常用的方法
Scipy的线性代数子模块:scipy.linalg
计算方阵行列式:det()]
from scipy import linalg
import numpy as np
#矩阵
A=np.array([[1,2,-1],[3,4,7],[9,10,-2]])
x=linalg.det(A)
print(x)
特征值,特征向量
from scipy import linalg
import numpy as np
#矩阵
A=np.array([[1,2,-1],[3,4,7],[9,10,-2]])
l,v=linalg.eig(A)
print('特征值',l)
print('特征向量',v)
计算逆矩阵
from scipy import linalg
import numpy as np
#矩阵
A=np.array([[1,2,-1],[3,4,7],[9,10,-2]])
B=linalg.inv(A)
print('A的逆矩阵',B)
print('A*B:',np.matmul(A,B))
lu分解
from scipy import linalg
import numpy as np
A=np.array([[1,2,-1],[5,3,4],[9,7,11]])result=linalg.lu(A)
print('矩阵A分解的三个矩阵为:\n')
for i in result:
print(i)
print('\n')
r1=np.matmul(result[0],result[1]);
rA=np.matmul(r1,result[2]);
print('result[0]*result[1]*result[2]=\n')
print(rA)
QR分解:
from scipy import linalg
import numpy as np
A = np.array([[1,2,-1],[5,3,4],[9,7,11]])
result= linalg.qr(A)
print ('矩阵A分解的两个矩阵为:\n')
for i in result:
print(i)
print('\n')
rA=np.matmul(result[0],result[1]);
print('result[0]*result[1]=\n')
print(rA)
print('矩阵q的行列式等于:',linalg.det(result[0]))
解线性方程组Ax=b:
scipy.linalg.solve(A,b)
from scipy import linalg
import numpy as np
A = np.array([[1,2,-1],[5,3,4],[9,7,11]])
b=np.array([-1,2,4])
x= linalg.solve(A,b)
print ('原方程组的解为x:\n')
print(x);
print('验算一下,A*x=\n');
print(np.matmul(A,x))
Scipy插值
一维分段插值interp1d()
scipy.interpolate.interp1d(x,y,kind='linear',axis=-1,copy=True,bounds_error=None,fill_value=NaN,
assume_sorted=False)
x,y:
长度相同的存储自变量数据、因变量数据一维数组
axis
:int,optional,指定要沿其进行插值的y轴。插值默认为y的最后一个轴
kind:
str or int,optional,设置插值类型的参数
![](https://img-blog.csdnimg.cn/direct/b26906a511ae48d88d38933417f5df29.png)
assume_sorted
:bool,optional,如果为False,则x的值可以按任何顺序排
列,并且将首先对其进行排序。如果为True,则x必须是单调递增值的数组
示例:
import numpy as np
from scipy import interpolate
import pylab as pl
x=np.linspace(0,10,11)
y=np.sin(x)
xnew=np.linspace(0,10,101)
pl.plot(x,y,'ro')
list1=['linear','nearest','cubic']forkindinlist1:
print(kind)
f=interpolate.interp1d(x,y,kind=kind)
#f是一个函数,用这个函数就可以找插值点的函数值了:
ynew=f(xnew)
pl.plot(xnew,ynew,label=kind)
pl.legend(loc='lowerright')
pl.show()
#单变量分段样条插值(可用于外插值)
UnivariateSpline(x,y,w=None,bbox=[None,None],k=3,s=None)
x,y
是X-Y坐标数组
w
是每个数据点的权重值
k
为样条曲线的阶数,1<=k<=5,默认k=3
bbox
2-sequencespecifyingtheboundaryoftheapproximation
interval.IfbboxisNone,bbox=[x[0],x[-1]].DefaultisNone.
s
为平滑参数。
s=0,样条曲线强制通过所有数据点
s>0,满足∑(w(y−spline(x)))
2
≤s
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x1=np.linspace(0,10,20)
y1=np.sin(x1)
sx1=np.linspace(0,12,100)超过10,外插值
func1=interpolate.UnivariateSpline(x1,y1,s=0)#强制通过所有点
sy1=func1(sx)
plt.plot(x1,y1,'o')
plt.plot(sx1,sy1)
plt.show()
二维网格数据分段插值
f=interp2d(x,y,z,kind= 'linear')
from scipy import interpolate
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
#创建网格
xx,yy=np.meshgrid(x,y)
z=np.sin(xx**2+yy**2)
f = interpolate.interp2d(x, y, z, kind='cubic')
xnew = np.arange(-5.01, 5.01, 1e-2)
ynew = np.arange(-5.01, 5.01, 1e-2)
znew = f(xnew, ynew)
#返回时要求一维数组
plt.plot(x, z[0, :],'ro-', xnew, znew[0, :],'b-')
plt.show()
二维网格数据插值的三维展示
from scipy import interpolate
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-1.5, 1.5, 0.3)
y = np.arange(-1.5, 1.5, 0.3)
xx,yy=np.meshgrid(x,y)
z=np.sin(xx**2+yy**2);
fig=plt.figure(figsize=(18,9));
ax1=plt.subplot(1,2,1,projection='3d');
surf1=ax1.plot_surface(xx,yy,z)#绘制原始数据后成的第一个子图
f = interpolate.interp2d(xx,yy,z,kind='cubic')
xnew = np.arange(-1.5, 1.5, 1e-2)
ynew = np.arange(-1.5, 1.5, 1e-2)
znew = f(xnew, ynew)
xx_new,yy_new=np.meshgrid(xnew,ynew)
ax2=plt.subplot(1,2,2,projection='3d');
surf2=ax2.plot_surface(xx_new,yy_new,znew)#根据插值绘制第二个子图
一维数据的拉格朗日插值
from scipy.interpolate import lagrange
poly=lagrange(x,y)#x,y分别是两个长度相同的已知数据构成的数组
from scipy.interpolate import lagrange
import numpy as np
x = np.array([0, 1, 2])
y = x**3
poly = lagrange(x, y)
print(type(poly))#打印出它的类型
print(poly)
Scipy数据的最小二乘逼近
拟合:
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
x
:array_like,形状为 (M,) 或 (M, K),M 个样本点的 x 坐标。y
:array_like,形状为 (M,) 或 (M, K),M 个样本点的 y 坐标。deg
:int,拟合多项式的阶数。w
:array_like,形状为 (M,),可选,样本点的权重。rcond
:float,可选,拟合条件数的阈值。cov
:bool 或 str,可选,如果给定且非 False,则返回估计值及其协方差矩阵。- 返回值
-
p: 多项式的系数,最高次幂在前。如果 y 是 2 维数组,那么 k-th 数据集的系数在 p[:, k] 中。
-
residuals:
残差的平方和,仅当full == True
时返回。 -
rank
- 缩放后的范德蒙德系数矩阵的有效秩,仅当
full == True
时返回。
- 缩放后的范德蒙德系数矩阵的有效秩,仅当
-
singular_values:
- 缩放后的范德蒙德系数矩阵的奇异值,仅当
full == True
时返回。
- 缩放后的范德蒙德系数矩阵的奇异值,仅当
-
rcond:
- 使用的 rcond 值,仅当
full == True
时返回。
- 使用的 rcond 值,仅当
-
V:
- 多项式系数估计的协方差矩阵,仅当
full == False
且cov == True
时返回。
- 多项式系数估计的协方差矩阵,仅当
示例;
import numpy as np
import matplotlib.pyplot as plt
xu=np.random.rand(50)*4*np.pi-2*np.pi
f=lambda x:np.sin(x)+0.5*x
yu=f(xu)
print(xu[:10].round(2))
print(yu[:10],round(2))
# 使用最小二乘法拟合 xu 和 yu 之间的多项式,这里拟合的是5次多项式,结果存储在 My_fit 中。
My_fit=np.polyfit(xu,yu,5)
# 使用拟合得到的多项式系数 My_fit 计算出在 xu 上的拟合值,结果存储在 ry 中。
ry=np.polyval(My_fit,xu)
#绘图
plt.plot(xu,yu,'b^',label='f(x)')
plt.plot(xu,ry,'r.',label='polynomial fitting')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
最小二乘逼近;
scipy.optimize.curve_fit(f,xdata,ydata,p0=None,sigma=None,absolute_sigma=
False,check_finite=True,bounds=(-inf,inf),method=None,jac=None,
**kwargs)
Parameters
:
Ø
f
:需要拟合的函数模型
Ø
xdata
:
array_like, x-coordinates of the M sample points
Ø
ydata
:
array_like, y-coordinates of the sample points.
Ø
p0
:
f
中需要拟合的参数初始值
.
Ø
bounds
:参数的搜索区间
Returns
:
Ø
popt
:
array
,参数的最优值
Ø
pcov
:最有参数的协方差矩阵
示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
x = np.array(range(10))
y =np.array([0,1,2,3,4,5,4,3,2,1])
#定义模型及参数
def gaussian(x,*param):
return param[0]*np.exp(-np.power(x - param[2], 2.) /
(2*np.power(param[4], 2.)))+\param[1]*np.exp(-np.power(x -
param[3],2.) / (2 * np.power(param[5], 2.)))
popt,pcov = curve_fit(gaussian,x,y,p0=[3,4,3,6,1,1])
print('模型的系数为:',popt)
print('系数的协方差矩阵为:',pcov)
plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaussian(x,*popt),'ro:',label='fit')
plt.legend()
plt.show()