Thanks for the code.
I tried the vectorized version before and the improvement is marginal. Since I only need the first singular values, and its associated eigenvectors, is there  a way to avoid full svd computation?