Существует ли усеченный алгоритм SVD, который вычисляет сингулярные значения по одному?
Моя проблема: я хотел бы вычислить первые сингулярных значений (и сингулярных векторов) большой плотной матрицы , но я не знаю, каково было бы подходящее значение . велико, поэтому из соображений эффективности я бы предпочел не оценивать полный SVD только для того, чтобы впоследствии урезать самые маленькие SV.
В идеале был бы способ вычислить сингулярные значения последовательно, от наибольшего ( σ 1 ) до наименьшего ( σ n ). Таким образом, я мог бы просто остановить вычисления после вычисления K - го особого значения , если σ к / σ 1 падает ниже некоторого порога.
Существует ли такой алгоритм (желательно с реализацией Python)? В моем поиске я обнаружил только усеченные SVD-функции, которые принимают k в качестве параметра, заставляя вас угадывать его априори.