Numpy入门(三):Numpy概率模块和线性代数模块
Numpy中经常使用到的两个模块是概率模块和线性代数模块,random
和 linalg
两个模块。
概率模块
-
产生二项分布的随机数:np.random.binomial(n,p,size=…),其中n,p,size分别是每轮试验次数、概率、轮数
-
产生超几何分布随机数:np.random.hypergeometric(n1,n2,n,size=…),其中参数意义分别是物件1总量、物件2总量、每次采样数、试验次数
-
产生N个正态分布的随机数:np.random.normal(均值,标准差,N)
-
产生N个对数正态分布的随机数:np.random.lognormal(mean,sigma,N)
import numpy as np
a = np.random.random(size=10)
print a
print a.reshape(2,5)[0.49377182 0.77456027 0.21313427 0.79165445 0.27105407 0.75815576
0.44956657 0.7455359 0.95411294 0.75944278]
[[0.49377182 0.77456027 0.21313427 0.79165445 0.27105407]
[0.75815576 0.44956657 0.7455359 0.95411294 0.75944278]]
线性代数模块
-
估计线性模型中的系数:a=np.linalg.lstsq(x,b),有b=a*x
-
求方阵的逆矩阵:np.linalg.inv(A)
-
求广义逆矩阵:np.linalg.pinv(A)
-
求矩阵的行列式:np.linalg.det(A)
-
解形如AX=b的线性方程组:np.linalg.solve(A,b)
-
求矩阵的特征值:np.linalg.eigvals(A)
-
求特征值和特征向量:np.linalg.eig(A)
-
Svd分解:np.linalg.svd(A)
svd分解在机器学习中,有着非常多的意义,这里使用Numpy进行svd分解:
import numpy as np
A = np.array([[2, 2], [1, 3], [0, 4], [0, 0]])
U,N,P = np.linalg.svd(A)
print U
print N
print P
更多教程:阿猫学编程