使用Python中实现的SVD在矩阵及其逼近之间的Frobenius范数问题

时间:2019-03-19 13:37:50

标签: python numpy matrix linear-algebra svd

根据IR book的定理18.4,通过将k个最小奇异值归零而获得的矩阵与其逼近之间的Frobenius误差等于移除的最大奇异值。但是,在下面的Python代码中,此Frobenius范数是1.07,而我们期望1是因为奇异值是:

array([2.16250096, 1.59438237, 1.27529025, 1.        , 0.39391525])

出什么问题了?

import numpy as np

la = np.linalg

a = np.array([[1,0,1,0,0,0], [0,1,0,0,0,0], [1,1,0,0,0,0], [1,0,0,1,1,0], [0,0,0,1,0,1]])

svd = la.svd(a, full_matrices=False)
U = svd[0]
S = np.diag(svd[1])
Vt = svd[2]

S[3,3] = 0
S[4,4] = 0

b = np.dot(np.dot(U, S), Vt)
la.norm(a-b)

0 个答案:

没有答案
相关问题