Python之Numpy:线性代数/矩阵运算
Posted johnnyzen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之Numpy:线性代数/矩阵运算相关的知识,希望对你有一定的参考价值。
一 要点
- 假定AX=b,求解未知矩阵X 【线性代数中常遇到的运算问题】
- 矩阵转置A^(T)
- 矩阵的逆A^(-1)
- 矩阵行列式的值|A|
- 矩阵的秩 rank(A)
- 矩阵的迹 trace(A)
- 其它
- 单位矩阵
- 0向量/矩阵
- ...
二 示例源码
2.1 求解AX=b中的未知参数矩阵X
import numpy as np
# Hypothsis : A*X = b
A = [[2,1,2],
[3,1,0],
[1,1,-1]];
b = np.transpose([-3,5,-2])# 转置
#[or] b = np.transpose(np.array([-3,5,-2]))# 转置
# 求解未知参数矩阵X
X = np.linalg.solve(A,b) # 方式一:直接使用numpy的solve函数一键求解
#A_inv=np.linalg.inv(A) # 方式二:先求逆运算,再点积求值
#X=np.dot(A_inv,b) # a.dot(b) 与 np.dot(a,b) 效果相同;but np.dot(a,b)与np.dot(b,a)效果肯定是不同的(线性代数/矩阵常识)
print("方程组的解:\n",X);
# [output]
方程组的解:
[ 4.4 -8.2 -1.8]
2.2 利用最小二乘法拟合函数模型
- 原方程
\[ f(x) = a + bx^3 \] - 其法方程
\[ A^T A \begin{pmatrix} a \\ b \\ \end{pmatrix} = A^T y \]
即:
\[ \begin{pmatrix} a \\ b \\ \end{pmatrix} = \left( A^T A \right)^{-1} A^T y \]
import numpy as np
A = [
[1,pow(-3,3)],
[1,pow(-2,3)],
[1,pow(-1,3)],
[1,pow(2,3)],
[1,pow(4,3)]
];
At = np.transpose(A); # A的转置矩阵
y = np.transpose([14.3,8.3,4.7,8.3,22.7]);
# 令 (a ,b)^T 为 未知参数X
X = np.dot(np.dot(np.linalg.inv(np.dot(At,A)),At),y)
print(X);
# [output]
[ 10.67505325 0.13679816]
2.3 线性代数常用运算
print("原矩阵A:\n",A);
print("原矩阵b:\n",b);
print("转置矩阵A^T:\n",np.transpose(A)); # 转置
print("矩阵的行列式值|A|:\n",np.linalg.det(A)); # 方阵的行列式值:|A|
print("矩阵的迹trace(A):\n",np.trace(A));
print("矩阵的秩rank(A):\n",np.linalg.matrix_rank(A));
print("逆矩阵A^(-1):\n",np.linalg.inv(A)); #矩阵的逆运算(条件:矩阵A可逆(行列式值不为0)| 矩阵A为方阵)
print("*"*30); # 分隔线
print("N阶单位矩阵:\n",np.eye(4));
# [output]
原矩阵A:
[[2, 1, 2], [3, 1, 0], [1, 1, -1]]
原矩阵b:
[-3 5 -2]
转置矩阵A^T:
[[ 2 3 1]
[ 1 1 1]
[ 2 0 -1]]
矩阵的行列式值|A|:
5.0
矩阵的迹trace(A):
2
矩阵的秩rank(A):
3
逆矩阵A^(-1):
[[-0.2 0.6 -0.4]
[ 0.6 -0.8 1.2]
[ 0.4 -0.2 -0.2]]
**********************
N阶单位矩阵:
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
三 推荐文献
以上是关于Python之Numpy:线性代数/矩阵运算的主要内容,如果未能解决你的问题,请参考以下文章
python---Numpy模块中线性代数运算,统计和数学函数