深度学习基础:线性代数(3)_逆矩阵与伪逆矩阵
矩阵的逆
定义
矩阵$A$的逆矩阵记作$A^{-1}$,其定义的矩阵满足如下条件
$$AA^{-1} = A^{-1}A = E$$
其中$E$是单位矩阵。
Python实现
Numpy
import numpy as np
A = np.array([[1, 2],
[3, 4]])
# 求逆矩阵
A_inv = np.linalg.inv(A)
print(A_inv)
print(np.dot(A, A_inv))
Scipy
import numpy as np
import scipy as sp
from scipy import linalg
A = np.array([[1, 2],
[3, 4]])
# 求逆矩阵
A_inv = linalg.inv(A)
print(A_inv)
print(np.dot(A, A_inv))
Moore-Penrose伪逆
定义
矩阵$A$的伪逆定义为:
$$
A^+ = \lim \limits_{\alpha \to 0} (A^TA + \alpha E)^{-1}A^T
$$
在实际的计算中不使用这个定义,而是使用下面的公式:
$$
A^+ = VD^+U^T
$$
其中,$U$,$D$和$V$是矩阵奇异值分解后得到的矩阵。对角矩阵$D$的伪逆$D^+$是其非零元素取倒数之后再转置得到的。
性质
(1)当矩阵$A$的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。特别地,$x = A^+y$是方程所有可行解中欧几里得范数$||x||_2$最小的一个。
(2)当矩阵$A$的行数多于列数时,可能没有解。此时使用伪逆得到的$x$,使得$Ax$和$y$的欧几里得距离$||Ax - y||_2$最小。
Python实现
Numpy
import numpy as np
A = np.array([[1, 2],
[3, 4],
[5, 6]])
A_pinv = np.linalg.pinv(A)
print(A_pinv)
print(np.dot(A_pinv, A))
Scipy
import numpy as np
import scipy as sp
from scipy import linalg
A = np.array([[1, 2],
[3, 4],
[5, 6]])
A_pinv = sp.linalg.pinv(A)
print(A_pinv)
print(np.dot(A_pinv, A))
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/fundamentals-of-deep-learning-linear-algebra-inverse-matrix-and-pseudo-inverse-matrix/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论