接上一节,在矩阵基本运算的基础上,NumPy的Linalg库可以满足大多数的线性代数运算。本节继续借用库来对矩阵的行列式、逆、对称、秩和可逆矩阵求解线性方程组。
1. 矩阵的行列式
from numpy import *
# n阶方阵的行列式运算
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
print "det(A):",linalg.det(A); # 方阵的行列式
输出结果:
det(A): -812.0
2. 矩阵的逆
from numpy import *
# n阶方阵的行列式运算
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
invA = linalg.inv(A) # 矩阵的逆
print "inv(A):",invA
输出结果:
inv(A): [[ -7.14285714e-02 -1.23152709e-02 5.29556650e-02 9.60591133e-02
-8.62068966e-03]
[ 2.14285714e-01 -3.76847291e-01 1.22044335e+00 -4.60591133e-01
3.36206897e-01]
[ -2.14285714e-01 8.25123153e-01 -2.04802956e+00 5.64039409e-01
-9.22413793e-01]
[ 1.66901077e-16 -4.13793103e-01 8.79310345e-01 -1.72413793e-01
8.10344828e-01]
[ 2.14285714e-01 -6.65024631e-02 1.85960591e-01 -8.12807882e-02
-1.46551724e-01]]
3. 矩阵的对称
from numpy import *
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
AT = A.T # 矩阵的对称
print A*AT
输出结果:
[[ 95 131 43 78 43]
[131 414 153 168 91]
[ 43 153 66 80 26]
[ 78 168 80 132 32]
[ 43 91 26 32 30]]
4. 矩阵的秩
# -*- coding: utf-8 -*-
from numpy import *
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
print linalg.matrix_rank(A) # 矩阵的秩
B = mat([[1,2,3],[4,5,6],[2,4,6]])
print linalg.matrix_rank(B)
输出结果:
5
2
5. 可逆矩阵求解
from numpy import *
A = mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
b = [1,0,1,0,1]
S = linalg.solve(A,b)
print S
输出结果:
[-0.0270936 1.77093596 -3.18472906 1.68965517 0.25369458]