夜的独白

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SciPy

标签: Python 数据分析


SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:

  • scipy.integrate:数值积分例程和微分方程求解器
  • scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能
  • scipy.optimize:函数优化器(最小化器)以及跟查找算法
  • scipy.signal:信号处理工具
  • scipy.sparse:稀疏矩阵和系数线性系统求解器
  • scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽马函数)的Fortran库)的包装器
  • scipy.stats:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法
  • scipy.weave:利用内联C++代码加速数组计算的工具

定积分scipy.integrate


导入积分模块:

    import numpy as np #导入numpy库
    from scipy import integrate #导入定积分模块
[/code]

scipy.integrate.quad(func,a,b):计算单重积分,参数分别为被积函数(f(x))、积分下限、积分上限

```code
    res, err = integrate.quad(np.sin, 0, np.pi/2) # 对sin函数在[0,$\pi/2$]区间上积分,quad函数返回两个值,第一个为积分结果,第二个为误差值
    print(integrate.quad(lambda x:x**2,0,1)) # 计算x**2的定积分,积分区间为0到1,并输出结果
[/code]

scipy.integrate.dblquad(func,a,b,gfun,hfun):计算双重积分,参数分别为被积函数(f(y,x))、x的积分下限、x的积分上限、y的积分下限、y的积分上限

```code
    print(integrate.dblquad(lambda x,y:x**2+y,0,2,lambda x:0,lambda x:1)) #对x**2+y求定积分,x积分区间[0,1],y积分区间[0,2],并输出结果
[/code]

scipy.integrate.nquad(func,ranges):计算多重积分,参数分别为被积函数(f(x0,x1,…,xn))、积分区间(格式为[[a,b],[c,d],[e,f]],依次为x0、x1、x2、的积分区间)

```code
    def f(x,y):
        return x**2+y
    
    def bound_x():
        return [0,1]
    
    def bound_y():
        return [0,2]
    
    print(integrate.nquad(f,[bound_x,bound_y]))
[/code]

* * *

#  优化器scipy.optimize

导入模块

```code
    import numpy as np #导入numpy库
    from scipy import optimize #导入优化模块
[/code]

scipy.optimize.minimize(func,x0,args=(),method=None,jac=None):计算标量函数的最小值,参数分别为标量函数、初值、、寻优方法

寻优方法有:

‘Nelder-Mead’  |  ‘Powell’  |  ‘CG’  |  ‘BFGS’  |  ‘Newton-CG’  |  ‘L-BFGS-B’
|  ‘TNC’  |  ‘COBYLA’  |  ‘SLSQP’  |  ‘dogleg’  |  ‘trust-ncg’  
---|---|---|---|---|---|---|---|---|---|---
[/code]

```code
* * *  
  
#  插值scipy.interpolate

导入模块

```code
    import numpy as np #导入numpy库
    from scipy import interpolate #导入interpolate模块
    import matplotlib.pyplot as plt #导入绘图模块
[/code]

```code
    x = np.linspace(0, 1, 10) #创建数组,相当于x
    y = np.sin(2 * np.pi * x) #相当于y
[/code]

scipy.interpolate.interp1d():1维插值函数

```code
    linear_f = interpolate.interp1d(x, y) #线性插值函数
    x_new = np.linspace(0, 1, 50) #插值后的x
    y_new = linear_f(x_new) #线性插值后的y
    cubic_f = interpolate.interp1d(x, y, kind='cubic') #应用插值函数
    cubic_y = cubic_f(x_new) #插值后的y值
[/code]

展示效果

```code
    plt.figure()
    plt.plot(x, y, 'o', ms=6, label='x')
    plt.plot(x_new, y_new, label='linear interp')
    plt.plot(x_new, cubic_y, label='cubic interp')
    plt.legend()
    plt.show()
[/code]

* * *

#  线性计算与矩阵分解scipy.linalg

导入模块

```code
    import numpy as np #导入numpy库
    from scipy import linalg as lg #导入scipy库的linalg模块
    arr=np.array([[1,2],[3,4]]) #创建方阵arr
    b=np.array([6,14]) #创建矩阵b
[/code]

scipy.linalg.det():计算方阵的行列式

```code
    print('Det:',lg.det(arr)) #求矩阵arr的行列式
[/code]

scipy.linalg.inv():计算方阵的逆矩阵

```code
    print('Inv:',lg.inv(arr)) #求矩阵arr的逆矩阵
[/code]

scipy.linalg.eig():计算方阵的特征向量

```code
    print('Eig:',lg.eig(arr)) #求矩阵arr的特征向量
[/code]

scipy.linalg.svd():对矩阵进行奇异值分解

```code
    print('SVD:',lg.svd(arr)) #对矩阵arr进行svd分解
[/code]

scipy.linalg.lu():对矩阵进行LU分解

```code
    print('LU:',lg.lu(arr)) #对矩阵arr进行lu分解
[/code]

scipy.linalg.qr():对矩阵进行QR分解

```code
    print('QR:',lg.qr(arr)) #对矩阵arr进行qr分解
[/code]

scipy.linalg.schur():对矩阵进行Schur分解

```code
    print('Schur:',lg.schur(arr)) #对矩阵arr进行Schur分解
[/code]

scipy.linalg.solve():方程组求解

```code
    print('Sol:',lg.solve(arr,b)) #求方程组arr*x=b的解
[/code]


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)
posted on 2021-07-08 15:22  夜的独白  阅读(477)  评论(0)    收藏  举报