Example #1
0
 def matrix_pair(self, rng, size, size_inner):
     left_factor_matrix = rng.standard_normal((size, size_inner))
     right_factor_matrix = rng.standard_normal((size_inner, size))
     square_matrix = rng.standard_normal((size, size))
     return (
         matrices.SquareLowRankUpdateMatrix(
             matrices.DenseRectangularMatrix(left_factor_matrix),
             matrices.DenseRectangularMatrix(right_factor_matrix),
             matrices.DenseSquareMatrix(square_matrix),
         ),
         square_matrix + left_factor_matrix @ right_factor_matrix,
     )
Example #2
0
 def __init__(self):
     matrix_pairs = {}
     rng = np.random.RandomState(SEED)
     for outer_dim in SIZES:
         inner_dim = max(1, outer_dim // 2)
         left_factor_matrix = rng.standard_normal((outer_dim, inner_dim))
         right_factor_matrix = rng.standard_normal((inner_dim, outer_dim))
         square_matrix = rng.standard_normal((outer_dim, outer_dim))
         matrix_pairs[(inner_dim, outer_dim)] = (
             matrices.SquareLowRankUpdateMatrix(
                 matrices.DenseRectangularMatrix(left_factor_matrix),
                 matrices.DenseRectangularMatrix(right_factor_matrix),
                 matrices.DenseSquareMatrix(square_matrix)),
             square_matrix + left_factor_matrix @ right_factor_matrix)
     super().__init__(matrix_pairs, rng)
Example #3
0
    def __init__(self):
        matrix_pairs = {}
        rng = np.random.RandomState(SEED)
        for outer_dim in SIZES:
            for inner_dim in [max(1, outer_dim // 2), max(1, outer_dim - 1)]:
                factor_matrix = rng.standard_normal((outer_dim, inner_dim))
                inner_pos_def_matrix = rng.standard_normal(
                    (inner_dim, inner_dim))
                inner_pos_def_matrix = (
                    inner_pos_def_matrix @ inner_pos_def_matrix.T)
                pos_def_matrix = rng.standard_normal((outer_dim, outer_dim))
                pos_def_matrix = pos_def_matrix @ pos_def_matrix.T
                matrix_pairs[(inner_dim, outer_dim)] = (
                    matrices.PositiveDefiniteLowRankUpdateMatrix(
                        matrices.DenseRectangularMatrix(factor_matrix),
                        matrices.DensePositiveDefiniteMatrix(pos_def_matrix),
                        matrices.DensePositiveDefiniteMatrix(
                            inner_pos_def_matrix)), pos_def_matrix +
                    factor_matrix @ (inner_pos_def_matrix @ factor_matrix.T))

        if AUTOGRAD_AVAILABLE:

            def param_func(param, matrix):
                return (matrix.pos_def_matrix.array +
                        param @ matrix.inner_pos_def_matrix @ param.T)

            def get_param(matrix):
                return matrix.factor_matrix.array

        else:
            param_func, get_param = None, None

        super().__init__(matrix_pairs, get_param, param_func, rng)
Example #4
0
 def __init__(self):
     matrix_pairs = {}
     rng = np.random.RandomState(SEED)
     for s0 in SIZES:
         for s1 in SIZES:
             if s0 != s1:
                 array = rng.standard_normal((s0, s1))
                 matrix_pairs[(s0, s1)] = (
                     matrices.DenseRectangularMatrix(array), array)
     super().__init__(matrix_pairs, rng)
Example #5
0
 def matrix_pair(self, rng, size, size_inner):
     factor_matrix = rng.standard_normal((size, size_inner))
     inner_pos_def_matrix = rng.standard_normal((size_inner, size_inner))
     inner_pos_def_matrix = inner_pos_def_matrix @ inner_pos_def_matrix.T
     pos_def_matrix = rng.standard_normal((size, size))
     pos_def_matrix = pos_def_matrix @ pos_def_matrix.T
     return (
         matrices.PositiveDefiniteLowRankUpdateMatrix(
             matrices.DenseRectangularMatrix(factor_matrix),
             matrices.DensePositiveDefiniteMatrix(pos_def_matrix),
             matrices.DensePositiveDefiniteMatrix(inner_pos_def_matrix),
         ),
         pos_def_matrix + factor_matrix @ (inner_pos_def_matrix @ factor_matrix.T),
     )
Example #6
0
 def matrix_pair(self, rng, size, request):
     n_terms, explicit = request.param
     arrays = [
         rng.standard_normal(
             (size if t % 2 == 0 else 2 * size, 2 * size if t % 2 == 0 else size)
         )
         for t in range(n_terms)
     ]
     matrices_ = [matrices.DenseRectangularMatrix(a) for a in arrays]
     np_matrix = nla.multi_dot(arrays)
     if explicit:
         return matrices.MatrixProduct(matrices_), np_matrix
     else:
         return reduce(lambda a, b: a @ b, matrices_), np_matrix
Example #7
0
 def matrix_pair(self, rng, size, size_inner):
     factor_matrix = rng.standard_normal((size, size_inner))
     inner_symmetric_matrix = rng.standard_normal((size_inner, size_inner))
     inner_symmetric_matrix = inner_symmetric_matrix + inner_symmetric_matrix.T
     symmetric_matrix = rng.standard_normal((size, size))
     symmetric_matrix = symmetric_matrix + symmetric_matrix.T
     return (
         matrices.SymmetricLowRankUpdateMatrix(
             matrices.DenseRectangularMatrix(factor_matrix),
             matrices.DenseSymmetricMatrix(symmetric_matrix),
             matrices.DenseSymmetricMatrix(inner_symmetric_matrix),
         ),
         symmetric_matrix
         + factor_matrix @ (inner_symmetric_matrix @ factor_matrix.T),
     )
Example #8
0
 def __init__(self):
     matrix_pairs = {}
     rng = np.random.RandomState(SEED)
     for outer_dim in SIZES:
         for inner_dim in [max(1, outer_dim // 2), max(1, outer_dim - 1)]:
             factor_matrix = rng.standard_normal((outer_dim, inner_dim))
             inner_symmetric_matrix = rng.standard_normal(
                 (inner_dim, inner_dim))
             inner_symmetric_matrix = (inner_symmetric_matrix +
                                       inner_symmetric_matrix.T)
             symmetric_matrix = rng.standard_normal((outer_dim, outer_dim))
             symmetric_matrix = symmetric_matrix + symmetric_matrix.T
             matrix_pairs[(inner_dim, outer_dim)] = (
                 matrices.SymmetricLowRankUpdateMatrix(
                     matrices.DenseRectangularMatrix(factor_matrix),
                     matrices.DenseSymmetricMatrix(symmetric_matrix),
                     matrices.DenseSymmetricMatrix(inner_symmetric_matrix)),
                 symmetric_matrix +
                 factor_matrix @ (inner_symmetric_matrix @ factor_matrix.T))
     super().__init__(matrix_pairs, rng)
Example #9
0
 def __init__(self):
     matrix_pairs = {}
     rng = np.random.RandomState(SEED)
     for s in SIZES:
         for n_terms in [2, 4]:
             for explicit in [True, False]:
                 arrays = [
                     rng.standard_normal((s if t % 2 == 0 else 2 * s,
                                          2 * s if t % 2 == 0 else s))
                     for t in range(n_terms)
                 ]
                 matrices_ = [
                     matrices.DenseRectangularMatrix(a) for a in arrays
                 ]
                 if explicit:
                     matrix = matrices.MatrixProduct(matrices_)
                 else:
                     matrix = reduce(lambda a, b: a @ b, matrices_)
                 matrix_pairs[(s, n_terms,
                               explicit)] = (matrix, nla.multi_dot(arrays))
     super().__init__(matrix_pairs, rng)
Example #10
0
 def matrix_pair(self, rng, shape_0, shape_1):
     array = rng.standard_normal((shape_0, shape_1))
     return matrices.DenseRectangularMatrix(array), array