python之scipy
阿新 • • 發佈:2018-11-22
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 | 指數分佈 |