深度学习基础:线性代数(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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
深度学习基础:线性代数(3)_逆矩阵与伪逆矩阵
矩阵的逆 定义 矩阵$A$的逆矩阵记作$A^{-1}$,其定义的矩阵满足如下条件 $$AA^{-1} = A^{-1}A = E$$ 其中$E$是单位矩阵。 Python实现 Numpy import numpy as ……
<<上一篇
下一篇>>
文章目录
关闭
目 录