2.9 伪逆

计算公式

A+=VD+UTboldsymbol{A^+}= boldsymbol{V}boldsymbol{D^+}boldsymbol{U^T} A+=VD+UT
其中,矩阵 Uboldsymbol{U}UDboldsymbol{D}DVboldsymbol{V}V是矩阵 Aboldsymbol{A}A奇异值分解后得到的矩阵。

对角矩阵Dboldsymbol{D}D的伪逆D+boldsymbol{D^+}D+是其非零元素取倒数之后再转置得到的

值得注意的是,通过np.linalg.svd得到的vboldsymbol{v}v矩阵是转置后的矩阵,所以在计算的时候需要再转置一次

实现代码

import numpy as np
data = np.random.normal(size=(4,5))
def get_inv(m):u,s,v = np.linalg.svd(data)sm = np.zeros(shape=(u.shape[0],v.shape[0]))s = np.diag(s)for i in range(u.shape[0]):for j in range(v.shape[0]):if (i<len(s) and j<len(s)):sm[i][j] = s[i][j]sm = np.where(sm!=0,1/sm,0)return (v.T.dot(sm.T)).dot(u.T)get_inv(data)

深度学习花书-2.9 伪逆矩阵-编程之家创作打卡挑战赛赢取流量/现金/CSDN周边激励大奖