1. 程式人生 > >python之scipy

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 指數分佈