深度学习基础:线性代数(3)_逆矩阵与伪逆矩阵

矩阵的逆

定义

矩阵$A$的逆矩阵记作$A^{-1}$,其定义的矩阵满足如下条件

$$AA^{-1} = A^{-1}A = E$$

其中$E$是单位矩阵。

Python实现

Numpy

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
8
9
10
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))

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :