如何在python中证明SVD | | A-Ak | | 2-范数?

如何在python中证明SVD | | A-Ak | | 2-范数?,python,svd,Python,Svd,我想用python证明SVD | | A-Ak | | 2-norm=sigma[k+1] import numpy as np from PIL import Image origin_path = 'cat_black.jpg' def restore(sigma, u, v, K): m = len(u) n = len(v[0]) a = np.zeros((m, n)) for k in range(K): uk = u[:, k

我想用python证明SVD | | A-Ak | | 2-norm=sigma[k+1]

import numpy as np
from PIL import Image


origin_path = 'cat_black.jpg'


def restore(sigma, u, v, K):
    m = len(u)
    n = len(v[0])
    a = np.zeros((m, n))
    for k in range(K):
        uk = u[:, k].reshape(m, 1)
        vk = v[k].reshape(1, n)
        a += sigma[k] * np.dot(uk, vk)   
    a = a.clip(0, 255)
    print('Sigma K = ', sigma[k])
    return np.rint(a).astype('uint8')

def norm(origin_array, processed_array):
    
    return np.linalg.norm((origin_array - processed_array), ord = 2)

if __name__ == "__main__":
    
    img_origin = Image.open(origin_path, 'r')
    img_gray = img_origin.convert("L")
    A = np.array(img_gray)
    
    u_r, sigma_r, v_r = np.linalg.svd(A) 
  
    K = 50 
    for k in range(1, K+1):
        Ak = restore(sigma_r, u_r, v_r, k)
        print('Norm = ', norm(A, Ak))
结果:

Sigma K = 17206.473910342025
Norm = 30655.405160130085
Sigma K = 3315.568979796393
Norm = 30795.891622390798
Sigma K = 3286.1767824148383
Norm = 29256.410859161282
Sigma K = 2368.9751805522765
Norm = 28037.018637931258
Sigma K = 2230.517905068977
Norm = 27435.34881148788
Sigma K = 2039.0906629046
Norm = 27194.777474480212
Sigma K = 1660.6421395853733
Norm = 27496.436013057115
Sigma K = 1383.1582873683822
Norm = 27518.02199879641
Sigma K = 1248.8586449917684
Norm = 26620.47323212858

结果不如预期,, 2-范数似乎变化不大,也不等于西格玛[k+1] 我的代码有问题吗,或者我误解了这个定理