python之scipy

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

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

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

提供线性代数相关计算的函数和方法

In [12]: 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
    ...: 

In [13]: lg.det(arr)  #计算矩阵的行列式
Out[13]: -2.0

In [14]: lg.inv(arr)  #计算矩阵的逆矩阵
Out[14]: 
array([[-2. ,  1. ],
       [ 1.5, -0.5]])

In [15]: lg.eig(arr)  #计算矩阵的特征向量
Out[15]: 
(array([-0.37228132+0.j,  5.37228132+0.j]), array([[-0.82456484, -0.41597356],
        [ 0.56576746, -0.90937671]]))

In [16]: lg.svd(arr)  #计算矩阵的奇异值分解
Out[16]: 
(array([[-0.40455358, -0.9145143 ],
        [-0.9145143 ,  0.40455358]]),
 array([5.4649857 , 0.36596619]),
 array([[-0.57604844, -0.81741556],
        [ 0.81741556, -0.57604844]]))

In [17]: lg.lu(arr)  #计算矩阵的LU分解
Out[17]: 
(array([[0., 1.],
        [1., 0.]]), array([[1.        , 0.        ],
        [0.33333333, 1.        ]]), array([[3.        , 4.        ],
        [0.        , 0.66666667]]))

In [18]: lg.qr(arr)  #计算矩阵的QR分解
Out[18]: 
(array([[-0.31622777, -0.9486833 ],
        [-0.9486833 ,  0.31622777]]), array([[-3.16227766, -4.42718872],
        [ 0.        , -0.63245553]]))

In [19]: lg.schur(arr)  #计算矩阵的schur分解
Out[19]: 
(array([[-0.37228132, -1.        ],
        [ 0.        ,  5.37228132]]), array([[-0.82456484, -0.56576746],
        [ 0.56576746, -0.82456484]]))

In [20]: lg.solve(arr,b)  #解方程组arr*x=b
Out[20]: array([2., 2.])

统计scipy.stats

总结统计工作中几个常用用法在python统计函数库scipy.stats的使用范例。以正态分布的常见需求为例了解scipy.stats的基本使用方法。

1.生成服从指定分布的随机数 
norm.rvs通过loc和scale参数可以指定随机变量的偏移和缩放参数,这里对应的是正态分布的期望和标准差。size得到随机数数组的形状参数。(也可以使用np.random.normal(loc=0.0, scale=1.0, size=None))

In [24]: import numpy as np
    ...: import scipy.stats as st
    ...: st.norm.rvs(loc = 0,scale = 0.1,size =10)
    ...: 
    ...: 
Out[24]: 
array([ 0.08809514,  0.09765964,  0.12468395, -0.0544451 ,  0.12859548,
        0.02640957,  0.06061125, -0.01086296, -0.12123444,  0.11861331])

In [25]: st.norm.rvs(loc = 3,scale = 10,size=(2,2))
Out[25]: 
array([[-5.46345226, 13.05527638],
       [13.04301939, -1.26544686]])

2.求概率密度函数指定点的函数值 
stats.norm.pdf正态分布概率密度函数。

In [26]: st.norm.pdf(0,loc = 0,scale = 1)
Out[26]: 0.3989422804014327

In [28]: st.norm.pdf(np.arange(3),loc = 0,scale = 1)
Out[28]: array([0.39894228, 0.24197072, 0.05399097])

3.求累计分布函数指定点的函数值 
stats.norm.cdf正态分布累计概率密度函数。

In [30]: st.norm.cdf(0,loc=3,scale=1)
Out[30]: 0.0013498980316300933

In [31]: st.norm.cdf(0,0,1)
Out[31]: 0.5

4.累计分布函数的逆函数

stats.norm.ppf正态分布的累计分布函数的逆函数,即下分位点。

In [32]: z05 = st.norm.ppf(0.05)

In [33]: z05
Out[33]: -1.6448536269514729

In [34]: st.norm.cdf(z05)
Out[34]: 0.049999999999999975

5.通用函数
stats连续型随机变量的公共方法:

名称   备注
rvs  产生服从指定分布的随机数
pdf   概率密度函数
cdf   累计分布函数
sf    残存函数(1-CDF)
ppf   分位点函数(CDF的逆)
isf  逆残存函数(sf的逆)
fit  对一组随机取样进行拟合,最大似然估计方法找出最适合取样数据的概率密度函数系数。
*离散分布的简单方法大多数与连续分布很类似,但是pdf被更换为密度函数pmf。

6.附录:常见分布

名称  含义
f F分布
gamma gam分布
poisson  泊松分布
beta  beta分布
hypergeom 超几何分布
lognorm 对数正态分布
binom 二项分布
uniform  均匀分布
chi2 卡方分布
cauchy  柯西分布
laplace  拉普拉斯分布
rayleigh 瑞利分布
t 学生T分布
norm 正态分布
expon 指数分布

猜你喜欢

转载自blog.csdn.net/YeChao3/article/details/84315952