SciPy線性代數(shù)-linalg
Numpy和sciPy都提供了線性代數(shù)函數(shù)庫(kù)linalg无埃,SciPy更為全面:解線性方程組、最小二乘解、特征值和特征向量卿拴、奇異值分解...等赤惊。
解線性方程組
import numpy as npfrom scipy import linalg
import timeit
m,n = 50,50
A = np.random.rand(m,n)
B = np.random.rand(m,n)
def my_func1():
?????? X1 = linalg.solve(A,B)
def my_func2():
?????? X2 = np.dot(linalg.inv(A),B)
t1 = timeit.Timer(stmt=my_func1).timeit(number=100)
t2 = timeit.Timer(stmt=my_func2).timeit(number=100)
print(t1,t2)
特征值和特征向量
n x n的矩陣A可以看作n維空間中的線性變換吼旧。
如果x為n維空間中的一個(gè)向量,那么A與x的矩陣乘積是對(duì)x進(jìn)行線性變換之后的向量未舟。
如果x是線性變換的特征向量圈暗,那么經(jīng)過(guò)這個(gè)線性變換后,得到新向量仍與原來(lái)的x保持在同乙方向上裕膀,長(zhǎng)度可能發(fā)生改變员串。
特征向量的長(zhǎng)度在該線性變換下縮放的比例稱為其特征值。
#特征值和特征向量-舉例
A = np.array([[1,-0.3],[-0.1,0.9]])
evalues,evectors = linalg.eig(A)
print(evalues)#特征值
print(evectors)#特征向量
奇異值分解-SVD
Linalg庫(kù)中的svd函數(shù):對(duì)矩陣進(jìn)行奇異值分解昼扛。其調(diào)用形式為:U,s,V = scd(M)
#奇異值分解--舉例
A = np.array([[1,-0.3],[-0.1,0.9]])
U,s,V = linalg.svd(A)
print(U)
print(s)
print(V)
SciPy的stats模塊
Stats模塊包含了多種概率分布的隨機(jī)變量
連續(xù)隨機(jī)變量是rv_continuous派生類的對(duì)象
離散隨機(jī)變量是rv_discrete派生類的對(duì)象
連續(xù)概率分布寸齐、離散概率分布、核密度估計(jì)抄谐、二項(xiàng)分布访忿、泊松部分、伽馬分布斯稳、學(xué)生t-分布與t檢驗(yàn)海铆、卡方分布和卡方檢驗(yàn)
以正態(tài)分布為例,獲取默認(rèn)正態(tài)分布隨機(jī)變量的期望值和方差:
stats.norm.stats()
Norm可以像函數(shù)一樣使用挣惰,通過(guò)loc和scale參數(shù)可以指定隨機(jī)變量的偏移和縮放參數(shù)卧斟。
X.stats.norm(loc=1.0,scale=2.0)
X.stats()
調(diào)用隨機(jī)變量x的rvs()方法,得到包含一萬(wàn)次隨機(jī)取樣值的數(shù)組x:
x = X.rvs(size = 10000)#對(duì)隨機(jī)變量取1000個(gè)值
import numpy as np
np.mean(x)
np.var(x)
使用mean()、var()計(jì)算此數(shù)組的均差和方差憎茂,其結(jié)果符合隨機(jī)變量x的特性
離散概率分布
當(dāng)分布函數(shù)的值域?yàn)殡x散時(shí)稱之為離散概率分布
例如:投擲有六個(gè)面的骰子時(shí)珍语,獲得1到6的整數(shù),因此所得到的概率分布為離散的
stats模塊中離散分布隨機(jī)變量都從rv_discrete類繼承竖幔,也可以直接用rv_discrete類自定義離散概率分布板乙。投擲骰子舉例:
1.數(shù)組x保存骰子的所有可能值
2.數(shù)組p保存每個(gè)值出現(xiàn)的概率
3.創(chuàng)建表示這個(gè)骰子的隨機(jī)變量dice
from scipy import stats
x = range(1,7)
p = (1.0/6,1.0/6,1.0/6,1.0/6,1.0/6,1.0/6)
dice = stats.rv_discrete(values=(x,p))
dice.rvs(size=20) #投擲此骰子20次,獲得符合概率p的隨機(jī)數(shù)
中心極限定律:大量相互獨(dú)立的隨機(jī)變量拳氢,其均值的分布以正態(tài)分布為極限募逞。如何驗(yàn)證?
由于每一次投擲骰子可以看作一個(gè)獨(dú)立的隨機(jī)事件馋评,投擲骰子50次的平均值可以看作“大量相互獨(dú)立的隨機(jī)變量”放接,其平均值的分布應(yīng)該十分接近正態(tài)分布。
import numpy as np
samples = dice.rvs(size=(20000,50))
samples_mean = np.mean(samples,axis=1)
print(samples)
print(samples_mean)
核密度估計(jì)-舉例
1.前面例子中每個(gè)點(diǎn)是離散的留特,因此平均值也是離散的(直方圖來(lái)顯示)
2.更平滑的顯示樣本的概率纠脾,進(jìn)行kde.gaussian_kde()進(jìn)行核密度估計(jì)
3.核密度估計(jì)與擬合的正態(tài)分布十分相似
SciPy數(shù)值積分-integtate
integtate模塊提供了幾種數(shù)值積分算法玛瘸,包括對(duì)常微分方程組(ODE)的數(shù)值積分。
計(jì)算球體體積苟蹈、解常微分方程
球的體積求解
多重定積分可以通過(guò)多次調(diào)用quad()實(shí)現(xiàn)糊渊。integrage提供了:二重定積分 dblquad()、三重定積分 tplquad()
解常微分方程