Is there a truncated SVD algorithm that computes the singular values one at a time?
My problem: I would like to compute the first $k$ singular values (and singular vectors) of a large dense matrix $M$, but I don't know what an appropriate value of $k$ would be. $M$ is large, so for efficiency reasons, I would rather not evaluate the full SVD only to truncate off the smallest SV's afterwards.
Ideally, there would be a way to compute the singular values $\sigma_1, \sigma_2,\ldots$ serially, from largest ($\sigma_1$) to smallest ($\sigma_n$). That way, I could simply halt the computation after computing the $k$th singular value if $\sigma_k/\sigma_1$ falls below some threshold.
Does such an algorithm exist (preferably with a Python implementation)? In my googling around, I've only found truncated SVD functions that take k as a parameter, thus forcing you to guess it a priori.