Is there any efficient way to find k smallest singular values of a large matrix?

  • 3
    $\begingroup$ Is this a Mathematica question or a mathematics/algorithms question? For Mathematica you could do TakeSmallest[SingularValueList[m], k] $\endgroup$
    – flinty
    Dec 29 '21 at 13:05
  • $\begingroup$ Efficient way I mean not finding the whole SVD, but faster. There is a fast Mathematica method for finding a few largest SVD eigenvalues, but I don't see any method for finding a few smallest ones. I should also add that the matrix I have is a large sparse matrix, 10000x10000 with ~30000 non-zeros. $\endgroup$
    – Igor
    Dec 29 '21 at 13:34
  • $\begingroup$ @Igor I am not sure that a method is implemented, or at least exposed and documented. Do you know of an algorithm that does what you want, i.e. calculates only the smallest singular values? If you do, then you can try to implement it and we can help you do so. $\endgroup$
    – MarcoB
    Dec 29 '21 at 14:05
  • $\begingroup$ OK, I have found one way to do this: m2=Transpose[m].m is still sparse, then Eigenvalues[m2,-k] gives k smallest eigenvalues, which are squares of original SVD eigenvalues. I've tested this in Mathematica and it works pretty fast. Thank you for the advices, the question can be closed. $\endgroup$
    – Igor
    Dec 29 '21 at 14:49
  • 1
    $\begingroup$ Assuming that all you eigenvalues of matrix m1 are positive. The Power Method gives the absolute largest eigenvalue, call it e1. Now we shift the eigenvalues by: m2= e1 IdentityMatrix - m1. The largest eigenvalue of m2 corresponds now to the smallest eigenvalue of m1. Finally you must undo the shiftingrds. $\endgroup$ Dec 29 '21 at 14:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.