『Numpy学习指南』第六章_深入学习NumPy模块(其一:线性代数模块)
2017-05-18 15:33
387 查看
矩阵求逆:np.linalg.inv(A)
解线性方程组:np.linalg.solve(A,b)
最小二乘法解方程组:np.linalg.lstsq(A,b)[0]
特征值: np.linalg.eigvals(A)
特征值&向量:eigenvalues,eigenvectors = np.linalg.eig(A)
奇异值分解矩阵:U,Sigma,V = np.linalg.svd(A,full_matrices=False)
按照对角线填充矩阵:np.diag(Sigma)
广义逆矩阵: np.linalg.pinv(A)
行列式求值:np.linalg.det(A)
import numpy as np '''线性代数(np.linalg)''' A = np.mat([[0,1,2],[1,0,3],[4,-3,8]]) print('A:\n',A) ### 矩阵求逆 ### inverse = np.linalg.inv(A) print('inverse of A:\n',inverse) print('Check\n',A*inverse)
A: [[ 0 1 2] [ 1 0 3] [ 4 -3 8]] inverse of A: [[-4.5 7. -1.5] [-2. 4. -1. ] [ 1.5 -2. 0.5]] Check [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]
解线性方程组:np.linalg.solve(A,b)
最小二乘法解方程组:np.linalg.lstsq(A,b)[0]
A = np.mat([[1,-2,1],[0,2,-8],[-4,5,9]]) b=np.array([0,8,-9]) print('A:\n',A) print('b:\n',b) ### 求解线性方程组(A*x=b) ### x = np.linalg.solve(A,b) print('Solution_solve:\n',x) x2 = np.linalg.lstsq(A,b)[0] print('Solution_lstsq:\n',x2) print('Check:\n',np.dot(A,x))
A: [[ 1 -2 1] [ 0 2 -8] [-4 5 9]] b: [ 0 8 -9] Solution_solve: [ 29. 16. 3.] Solution_lstsq: [ 29. 16. 3.] Check: [[ 0. 8. -9.]]
特征值: np.linalg.eigvals(A)
特征值&向量:eigenvalues,eigenvectors = np.linalg.eig(A)
A = np.mat([[3,-2],[1,0]]) print('A:\n',A) ### 求解特征值和特征向量(A*x=a*x) ### # 获取特征值 print('Eigenvalues:\n',np.linalg.eigvals(A)) # 获取特征值和特征向量 eigenvalues,eigenvectors = np.linalg.eig(A) print('Eigenvalues:\n',eigenvalues) print('Eigenvector(按列算):\n',eigenvectors) for i in range(len(eigenvalues)): print('Left:\n',np.dot(A,eigenvectors[:,i])) print('Right:\n',eigenvalues[i]*eigenvectors[:,i])
A: [[ 3 -2] [ 1 0]] Eigenvalues: [ 2. 1.] Eigenvalues: [ 2. 1.] Eigenvector(按列算): [[ 0.89442719 0.70710678] [ 0.4472136 0.70710678]] Left: [[ 1.78885438] [ 0.89442719]] Right: [[ 1.78885438] [ 0.89442719]] Left: [[ 0.70710678] [ 0.70710678]] Right: [[ 0.70710678] [ 0.70710678]]
奇异值分解矩阵:U,Sigma,V = np.linalg.svd(A,full_matrices=False)
按照对角线填充矩阵:np.diag(Sigma)
A = np.mat([[4,11,14],[8,7,-2]]) print('A:\n',A) ### 奇异值分解 ### U,Sigma,V = np.linalg.svd(A,full_matrices=False) print('U:\n',U) print('Sigma:\n',Sigma) # 得到的是奇异值并非矩阵 print('V:\n',V) print('Sigma:\n',np.diag(Sigma)) # 还原奇异值矩阵 print('Check:\n',U*np.diag(Sigma)*V)
A: [[ 4 11 14] [ 8 7 -2]] U: [[-0.9486833 -0.31622777] [-0.31622777 0.9486833 ]] Sigma: [ 18.97366596 9.48683298] V: [[-0.33333333 -0.66666667 -0.66666667] [ 0.66666667 0.33333333 -0.66666667]] Sigma: [[ 18.97366596 0. ] [ 0. 9.48683298]] Check: [[ 4. 11. 14.] [ 8. 7. -2.]]
广义逆矩阵: np.linalg.pinv(A)
A = np.mat([[4,11,14],[8,7,-2]]) print('A:\n',A) ### 广义逆矩阵 ### pseudoinv = np.linalg.pinv(A) # np.linalg.inv()只对方阵有效 print('Pseudo inverse:\n',pseudoinv) print('Check:\n',A*pseudoinv) # 并不严格,不过近似单位阵了
A: [[ 4 11 14] [ 8 7 -2]] Pseudo inverse: [[-0.00555556 0.07222222] [ 0.02222222 0.04444444] [ 0.05555556 -0.05555556]] Check: [[ 1.00000000e+00 -5.55111512e-16] [ 0.00000000e+00 1.00000000e+00]]
行列式求值:np.linalg.det(A)
A = np.mat([[3,4],[5,6]]) print('A:\n',A) ### 行列式 ### print('Determinant:\n',np.linalg.det(A))
A: [[3 4] [5 6]] Determinant: -2.0
相关文章推荐
- 『Numpy学习指南』第六章_深入学习NumPy模块(其二:FFT模块&随机数模块)
- Numpy学习笔记之线性代数
- 线性代数和numpy——黑板客老师课程学习
- MIT线性代数学习心得其一
- 深度学习框架Keras学习系列(一):线性代数基础与numpy使用(Linear Algebra Basis and Numpy)
- 线性代数公开课学习资源
- 线性代数学习笔记一:行列式
- (转载)FPGA基础知识篇----深入学习串口模块
- [转] [献给想深入学习网络编程的朋友] C,C++网络编程学习简明指南
- 【转】ArcGIS空间分析模块学习指南(九、十、十一)
- [公开课] 线性代数 学习记录1
- [献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南
- 【转】ArcGIS空间分析模块学习指南(三、四、五、六、七、八)---表面分析工具
- Python之numpy模块array简短学习
- nginx模块学习——nginx_http_push_module模块深入讲解和聊天室实现
- 深入学习Django源码基础11 - 简要分析Django中template模块1
- 线性代数学习笔记二:矩阵及其运算
- [献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南。
- 【转】ArcGIS空间分析模块学习指南(一、二)
- 线性代数学习框架