예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)