根据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)