下面说一下在 python 中实现 SVD
Numpy 有一个 linalg 的线性代数工具箱。接下来我们了解一下 领用该工具箱如何实现下矩阵的SVD处理。
矩阵
A = [[1,3,5,9,7],[8,12,3,4,7],[3,1,5,7,13],[11,10,5,9,3],[14,16,2,8,7]]
from numpy import ∗
U,Sigma,VT = linalg.svd(A)
print U,Sigma,VT
在 python 中运行上述代码,得到一下结果:
U=array(
[[-0.27373252,0.50806498,-0.43241186,-0.64288486,0.25818506],
[-0.44384892,-0.14105122,0.47686421,-0.47422006,-0.57516828],
[-0.31310645,0.74960322,0.32368329,0.48004092,-0.06963623],
[-0.48013606,-0.17353387,-0.66483461,0.3448185,-0.42243401],
[-0.63206198,-0.36049346,0.19709028, 0.11169292,0.64747373]])
VT=array(
[([-0.51415401,-0.5816577 ,-0.21580804,-0.43018369,-0.40704897],
[-0.37330787,-0.48505774,0.29967486,0.3370468,0.64958038],
[-0.03248352,0.20328693,-0.33122133,-0.66879308,0.63295141],
[-0.03248352, 0.20328693,-0.33122133,-0.66879308, 0.63295141],
[0.76810761,-0.61964022,-0.09418406,-0.10598015,0.07716396],
[-0.07240458,-0.03337268,-0.86315912, 0.49277325,0.07599146] )]
Sigma=array([36.74814846,14.27057024,6.16821006, 3.07272287, 1.85363656]
注意:矩阵Sigma以行向量返回,而非矩阵。(由于矩阵除了对 角线上元素其它全为 0,故为节省空间仅返回对角元素。)
本小节至此,我们知道了奇异值分解的定义、物理及几何意义, 并且知道在 python 中调用程序包做奇异值分解。