def test_less_accurate_than_full_svd(self): A = lowrank(100, 100) U, s, Vh = randomized_svd.randomized_svd(A, 10) S = la.diagsvd(s, U.shape[1], U.shape[1]) randomized_err = la.norm(U.dot(S).dot(Vh) - A, 2) U, s, Vh = self.full_svd(A) S = la.diagsvd(s, U.shape[1], U.shape[1]) full_err = la.norm(U.dot(S).dot(Vh) - A, 2) self.assertGreater(1e-2 * randomized_err, full_err)
def test_svd_full_rank(self): A = np.random.randn(50, 50) U, s, Vh = randomized_svd.randomized_svd(A) self.assertEqual(U.shape[0], 50) self.assertEqual(Vh.shape[1], 50)
def err(power_ter, rank): U, s, Vh = randomized_svd.randomized_svd(A, rank, power_iter=power_ter) return la.norm((U * s).dot(Vh) - A, 2)
def test_svd_err_small(self): A = lowrank(100, 80) U, s, Vh = randomized_svd.randomized_svd(A, 30, power_iter=2) self.assertLess(la.norm((U * s).dot(Vh) - A, 2), 1e-7)