numpy线性代数
import numpy as np
mat = np.mat((np.arange(9)+1).reshape(3,3))
print(mat)
[[1 2 3]
[4 5 6]
[7 8 9]]
1.求逆
print(mat.I)
[[ 3.15251974e+15 -6.30503948e+15 3.15251974e+15]
[-6.30503948e+15 1.26100790e+16 -6.30503948e+15]
[ 3.15251974e+15 -6.30503948e+15 3.15251974e+15]]
print(np.linalg.inv(mat))
[[ 3.15251974e+15 -6.30503948e+15 3.15251974e+15]
[-6.30503948e+15 1.26100790e+16 -6.30503948e+15]
[ 3.15251974e+15 -6.30503948e+15 3.15251974e+15]]
2.求解线性方程组
A = np.mat("1 -2 1;0 2 -8;-4 5 9")
b = np.array([0, 8, -9])
print(A)
print(b)
[[ 1 -2 1]
[ 0 2 -8]
[-4 5 9]]
[ 0 8 -9]
x = np.linalg.solve(A,b)
print(x)
[29. 16. 3.]
3.特征值和特征向量
- eigvals函数求解特征值
- eig函数求解特征值和特征向量
- 使用dot函数验证求得的解是否正确。分别计算等式 Ax = ax 的左半部分和右半部分,
检查是否相等。(点乘)
ev = np.linalg.eigvals(mat)
print(ev)
[ 1.61168440e+01 -1.11684397e+00 -9.75918483e-16]
e = np.linalg.eig(mat)
print(e)
(array([ 1.61168440e+01, -1.11684397e+00, -9.75918483e-16]), matrix([[-0.23197069, -0.78583024, 0.40824829],
[-0.52532209, -0.08675134, -0.81649658],
[-0.8186735 , 0.61232756, 0.40824829]]))
4.矩阵分解SVD
U, sigma, V = np.linalg.svd(mat)
print(U)
print(sigma)
print(V)
[[-0.21483724 0.88723069 0.40824829]
[-0.52058739 0.24964395 -0.81649658]
[-0.82633754 -0.38794278 0.40824829]]
[1.68481034e+01 1.06836951e+00 3.33475287e-16]
[[-0.47967118 -0.57236779 -0.66506441]
[-0.77669099 -0.07568647 0.62531805]
[-0.40824829 0.81649658 -0.40824829]]
5.广义逆
- 以使用numpy.linalg模块中的pinv函数进行求解
6.行列式
- numpy.linalg模块中的det函数可以计算矩阵的行列式