Пример #1
0
    def testAddCols(self):
        Utilde, Stilde, Vtilde = SVDUpdate.addCols(self.U, self.s, self.V,
                                                   self.B)

        nptst.assert_array_almost_equal(Utilde.T.dot(Utilde),
                                        numpy.eye(Utilde.shape[1]))
        nptst.assert_array_almost_equal(Vtilde.T.dot(Vtilde),
                                        numpy.eye(Vtilde.shape[1]))

        self.assertEquals(Stilde.shape[0], self.k)

        #Check we get the original solution with full SVD
        U, s, V = numpy.linalg.svd(self.A, full_matrices=False)
        inds = numpy.flipud(numpy.argsort(s))
        U, s, V = Util.indSvd(U, s, V, inds)

        Utilde, Stilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B, k=100)
        D = numpy.c_[self.A, self.B]

        nptst.assert_array_almost_equal(D, (Utilde * Stilde).dot(Vtilde.T), 4)

        #Check solution for partial rank SVD
        k = 20
        U, s, V = numpy.linalg.svd(self.A)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)

        Utilde, Stilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B)
        D = numpy.c_[(U * s).dot(V.T), self.B]
        U, s, V = numpy.linalg.svd(D)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)

        nptst.assert_array_almost_equal((U * s).dot(V.T),
                                        (Utilde * Stilde).dot(Vtilde.T), 4)

        #Test if same as add cols
        U, s, V = numpy.linalg.svd(self.A)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)
        Utilde, sTilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B)
        Vtilde2, sTilde2, Utilde2 = SVDUpdate.addRows(V, s, U, self.B.T)

        nptst.assert_array_almost_equal((Utilde * sTilde).dot(Vtilde.T),
                                        (Utilde2 * sTilde2).dot(Vtilde2.T))
Пример #2
0
    def testAddCols(self):
        Utilde, Stilde, Vtilde = SVDUpdate.addCols(self.U, self.s, self.V, self.B)
        
        nptst.assert_array_almost_equal(Utilde.T.dot(Utilde), numpy.eye(Utilde.shape[1]))
        nptst.assert_array_almost_equal(Vtilde.T.dot(Vtilde), numpy.eye(Vtilde.shape[1]))
        
        self.assertEquals(Stilde.shape[0], self.k)
        
        #Check we get the original solution with full SVD 
        U, s, V = numpy.linalg.svd(self.A, full_matrices=False)
        inds = numpy.flipud(numpy.argsort(s))
        U, s, V = Util.indSvd(U, s, V, inds)
             
        Utilde, Stilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B, k=100)
        D = numpy.c_[self.A, self.B]

        nptst.assert_array_almost_equal(D, (Utilde*Stilde).dot(Vtilde.T), 4)
        
        #Check solution for partial rank SVD 
        k = 20 
        U, s, V = numpy.linalg.svd(self.A)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)
        
        Utilde, Stilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B)
        D = numpy.c_[(U*s).dot(V.T), self.B]
        U, s, V = numpy.linalg.svd(D)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)
        
        nptst.assert_array_almost_equal((U*s).dot(V.T), (Utilde*Stilde).dot(Vtilde.T), 4)
        
        #Test if same as add cols 
        U, s, V = numpy.linalg.svd(self.A)
        inds = numpy.flipud(numpy.argsort(s))[0:k]
        U, s, V = Util.indSvd(U, s, V, inds)
        Utilde, sTilde, Vtilde = SVDUpdate.addCols(U, s, V, self.B)
        Vtilde2, sTilde2, Utilde2 = SVDUpdate.addRows(V, s, U, self.B.T)
        
        nptst.assert_array_almost_equal((Utilde*sTilde).dot(Vtilde.T),  (Utilde2*sTilde2).dot(Vtilde2.T))