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 | 产生服从指定分布的随机数 |
概率密度函数 | |
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 | 指数分布 |