Задача с нормой Фробениуса между матрицей и ее приближением с использованием SVD, реализованной в Python - PullRequest
1 голос
/ 19 марта 2019

Согласно теореме 18.4 книги IR ошибка Фробениуса между матрицей и ее приближением, полученная путем обнуления k наименьших сингулярных значений, равна наибольшему удаленному сингулярному значению.Но в следующем коде Python эта норма Фробениуса равна 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)
...