if isspmatrix(m): m = m.todense() u, s, vh = svd(m) if which == 'LM': ii = np.argsort(s)[-k:] elif which == 'SM': ii = np.argsort(s)[:k] else: raise ValueError("unknown which=%r" % (which,)) return u[:, ii], s[ii], vh[ii] def svd_estimate(u, s, vh): return np.dot(u, np.dot(np.diag(s), vh)) n = 5 x = hilbert(n) # u,s,vh = svd(x) # s[2:-1] = 0 # x = svd_estimate(u, s, vh) which = 'SM' k = 2 u, s, vh = sorted_svd(x, k, which=which) su,ss,svh = old_svds(x, k, which=which) ssu,sss,ssvh = new_svds(x, k, which=which) m_hat = svd_estimate(u, s, vh) sm_hat = svd_estimate(su, ss, svh) ssm_hat = svd_estimate(ssu, sss, ssvh)
ii = np.argsort(s)[:k] else: raise ValueError("unknown which=%r" % (which,)) return u[:, ii], s[ii], vh[ii] def svd_estimate(u, s, vh): return np.dot(u, np.dot(np.diag(s), vh)) x = np.array([[1, 2, 3], [3, 4, 3], [1, 0, 2], [0, 0, 1]], np.float) y = np.array([[1, 2, 3, 8], [3, 4, 3, 5], [1, 0, 2, 3], [0, 0, 1, 0]], np.float) z = csc_matrix(x) m = x.T k = 1 u, s, vh = sorted_svd(m, k) su, ss, svh = old_svds(m, k) ssu, sss, ssvh = new_svds(m, k) s ss sss u su ssu
if isspmatrix(m): m = m.todense() u, s, vh = svd(m) if which == 'LM': ii = np.argsort(s)[-k:] elif which == 'SM': ii = np.argsort(s)[:k] else: raise ValueError("unknown which=%r" % (which, )) return u[:, ii], s[ii], vh[ii] def svd_estimate(u, s, vh): return np.dot(u, np.dot(np.diag(s), vh)) n = 5 x = hilbert(n) # u,s,vh = svd(x) # s[2:-1] = 0 # x = svd_estimate(u, s, vh) which = 'SM' k = 2 u, s, vh = sorted_svd(x, k, which=which) su, ss, svh = old_svds(x, k, which=which) ssu, sss, ssvh = new_svds(x, k, which=which) m_hat = svd_estimate(u, s, vh) sm_hat = svd_estimate(su, ss, svh) ssm_hat = svd_estimate(ssu, sss, ssvh)