线性代数 2018/11/11
子模块numpy.linalg实现了基本的线性代数,建议使用scipy.linalg
==========================================================================
1.numpy.linalg
# 跟MATLAB和R是相同的行业标准级Fortran库
from numpy import *
from numpy.linalg import *
a = array([[ 1.0 , 2.0], [ 3.0,4.0]])# array([[1., 2.],[3., 4.]])
a.transpose() # array([[1., 3.],[2. , 4.]])
inv(a) #计算方阵的逆 # array([[-2. , 1. ],[1.5, -0.5 ]])
u = eye( 2) # unit 2x2matrix; # array([[1., 0.], [0., 1.]])
j = array([[0.0 , - 1.0], [ 1.0,0.0 ]])
dot (j, j) # matrix product # array([[-1., 0.],[ 0. , -1.]])
trace(u) # 对角线元素和 # 2.0
y = array([[ 5.], [ 7.]])
solve(a, y)#解线性方程组Ax= b ,其中A 为一个方阵# array([[- 3.],[4.]])
eig(j) #计算方阵的特征值和特征向量
# (array([ 0.+1.j, 0. -1. j]),array([[0.70710678+0.j, 0.70710678+0. j],
# [ 0.00000000-0.70710678j, 0.00000000+0.70710678j]]))
X = np.random.randn(2, 2)# array([[-1.16823295, 0.01042582],[ 1.42594654, 0.30574199]])
mat= X. T. dot(X) # array([[3.39809175, 0.42379195], [0.42379195, 0.09358686]])
inv(mat)#方阵的逆 # array([[ 0.67612198, -3.06170169], [-3.06170169, 24.54964847]])
mat.dot(inv(mat)) # array([[1., 0.],[0., 1.]])
q, r = qr(mat)
q,r
# (array([[-0.99231268, -0.12375596], [-0.12375596, 0.99231268]]),
# array([[-3.42441633, -0.43211605],[ 0. , 0.04042065]]))
===========================================================================
2.备注
No | 函数 | 说明 |
1 | diag | 以一维数组的形式返回方阵的对角线(或非对角线)元素, |
2 | 或将一维数组转换为方阵(非对角线元素为0) | |
3 | dot | 矩阵乘法 |
4 | trace | 计算对角线元素的和 |
5 | det | 计算矩阵行列式 |
6 | eig | 计算方阵的特征值和特征向量 |
7 | inv | 计算方阵的逆 |
8 | pinv | 计算矩阵的Moore - Penrose伪逆 |
9 | qr | 计算QR分解 |
10 | svd | 计算奇异值分解( SVD) |
11 | solve | 解线性方程组Ax= b ,其中A 为一个方阵 |
12 | lstsq | 计算Ax= b的最小二乘解 |