深度学习基础:线性代数(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))
上一篇 深度学习基础:线性代数(2)_奇异值分解及numpy、scipy实现
下一篇 深度学习基础:线性代数(4)_范数
目录
文章列表
1 微信公众号现金红包展示形式说明
微信公众号现金红包展示形式说明
2
Flutter Widget之ListTile
Flutter Widget之ListTile
3
Android组件化容器框架Atlas
Android组件化容器框架Atlas
4
理解OpenSSL、x509、crt、cer、key、csr、ssl、tls
理解OpenSSL、x509、crt、cer、key、csr、ssl、tls
5
Android NDK基础8:C_文件IO
Android NDK基础8:C_文件IO
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。