Я пытаюсь попасть в разложение по сингулярным значениям (SVD).Я нашел эту YouTube Lecture , которая содержит пример.Тем не менее, когда я пробую этот пример в numpy, я получаю «разные» результаты.В этом примере входная матрица равна
A = [ [1,1,1,0,0], [3,3,3,0,0], [4,4,4,0,0], [5,5,5,0,0], [0,2,0,4,4], [0,0,0,5,5], [0,1,0,2,2] ]
A = np.asarray(A)
print(A)
[[1 1 1 0 0]
[3 3 3 0 0]
[4 4 4 0 0]
[5 5 5 0 0]
[0 2 0 4 4]
[0 0 0 5 5]
[0 1 0 2 2]]
Ранг этой матрицы равен 3 (np.linalg.matrix_rank(A)
).В лекции говорится, что число сингулярных значений является рангом матрицы, и в этом примере сигма-матрица S действительно имеет размер 3 = 3.Однако при выполнении
U, S, V = np.linalg.svd(A)
матрица S
содержит 5 значений.С другой стороны, первые 3 значения соответствуют одному в примере, а другие 2 в основном равны 0. Могу ли я предположить, что получим больше сингулярных значений, чем ранг, из-за численного алгоритма SVD и конечного представления действительных чиселна компьютерах - или что-то в этом роде?