Existe-t-il un algorithme SVD tronqué qui calcule les valeurs singulières une par une?
Mon problème: je voudrais calculer les premières valeurs singulières (et vecteurs singuliers) d'une grande matrice dense M , mais je ne sais pas ce que serait une valeur appropriée de k . M est grand, donc pour des raisons d'efficacité, je préfère ne pas évaluer le SVD complet uniquement pour tronquer les plus petits SV par la suite.
Idéalement, il y aurait un moyen de calculer les valeurs singulières série, de la plus grande ( σ 1 ) à la plus petite ( σ n ). De cette façon, je pourrais simplement arrêter le calcul après avoir calculé la k ème valeur singulière si σ k / σ 1 tombe en dessous d'un certain seuil.
Un tel algorithme existe-t-il (de préférence avec une implémentation Python)? Dans mes recherches, je n'ai trouvé que des fonctions SVD tronquées qui prennent k en paramètre, vous forçant ainsi à le deviner a priori.