Example #1
0
    def test_householder_tfm(self):

        a = [[1.0, 2.0, 3.0], [2.0, 0.0, -1.0]]

        svd._householder_tfm_rows_tail_inplace(a, [1.0, 0.0, 0.0])
        self.assertTrue(mat_eq(a, [[-1.0, 2.0, 3.0], [-2.0, 0.0, -1.0]]))
        svd._householder_tfm_rows_tail_inplace(a, [1.0, 0.0, 0.0])
        self.assertTrue(mat_eq(a, [[1.0, 2.0, 3.0], [2.0, 0.0, -1.0]]))
Example #2
0
    def test_householder_bring2(self):
        v = [1.0, 2.0, 3.0]
        b = svd._householder_bring_vector(v, -1)
        m = copy_mat( [v] )
        svd._householder_tfm_rows_tail_inplace( m, b )

        self.assertTrue( abs(m[0][0]) < 1e-5 )
        self.assertTrue( abs(m[0][1]) < 1e-5 )
        self.assertTrue( abs(m[0][2]) > 0  )

        self.assertTrue( abs(abs(m[0][2]) - vec_norm2(v)) < 1e-5 )
Example #3
0
    def test_householder_bring2(self):
        v = [1.0, 2.0, 3.0]
        b = svd._householder_bring_vector(v, -1)
        m = copy_mat([v])
        svd._householder_tfm_rows_tail_inplace(m, b)

        self.assertTrue(abs(m[0][0]) < 1e-5)
        self.assertTrue(abs(m[0][1]) < 1e-5)
        self.assertTrue(abs(m[0][2]) > 0)

        self.assertTrue(abs(abs(m[0][2]) - vec_norm2(v)) < 1e-5)
Example #4
0
 def test_householder_tfm(self):
     
     a = [[1.0, 2.0, 3.0],
          [2.0, 0.0, -1.0]]
     
     svd._householder_tfm_rows_tail_inplace( a, [1.0, 0.0, 0.0] )
     self.assertTrue( mat_eq( a, 
                              [[-1.0, 2.0, 3.0],
                               [-2.0, 0.0, -1.0]] ) )
     svd._householder_tfm_rows_tail_inplace( a, [1.0, 0.0, 0.0] )
     self.assertTrue( mat_eq( a, 
                              [[1.0, 2.0, 3.0],
                               [2.0, 0.0, -1.0]] ) )
Example #5
0
    def test_householder_tfm_tail_numpy(self):
        """Big test on arbitrary householder transformations"""
        import numpy
        N, M = 2,3
        for i in xrange(100):
            a = numpy.random.rand( N,M) - 0.5
            v = numpy.random.rand( M ) - 0.5
            vn = numpy.array(normalized_vec( v ))
            
            H = numpy.eye(M) - 2*numpy.dot( vn.reshape((M,1)), vn.reshape((1,M)) ) # H = E - 2*vv'
            a1 = numpy.dot(a, H)

            svd._householder_tfm_rows_tail_inplace( a, vn )
            self.assertTrue( mat_eq( a1, a, tol=1e-5 ) )
Example #6
0
    def test_householder_tfm_tail_numpy(self):
        """Big test on arbitrary householder transformations"""
        import numpy
        N, M = 2, 3
        for i in xrange(100):
            a = numpy.random.rand(N, M) - 0.5
            v = numpy.random.rand(M) - 0.5
            vn = numpy.array(normalized_vec(v))

            H = numpy.eye(M) - 2 * numpy.dot(vn.reshape(
                (M, 1)), vn.reshape((1, M)))  # H = E - 2*vv'
            a1 = numpy.dot(a, H)

            svd._householder_tfm_rows_tail_inplace(a, vn)
            self.assertTrue(mat_eq(a1, a, tol=1e-5))