'Simulate num_reps observations of :math:`x_T` and :math:`y_T` given
:math:`x_0 \sim N(\mu_0, \Sigma_0)`.
Parameters
T : scalar(int), optional(default=10)
The period that we want to replicate values for
num_reps : scalar(int), optional(default=100)
The number of replications that we want
Returns
x : array_like(float)
An n x num_reps array, where the j-th column is the j_th
observation of :math:`x_T`
y : array_like(float)
A k x num_reps array, where the j-th column is the j_th
observation of :math:`y_T`'

def replicate(self, T=10, num_reps=100):

    x = np.empty((self.n, num_reps))
    for j in range(num_reps):
        (x_T, _) = self.simulate(ts_length=(T + 1))
        x[:, j] = x_T[:, (-1)]
    if (self.H is not None):
        v = np.random.randn(self.l, num_reps)
        y = (self.G.dot(x) + self.H.dot(v))
    else:
        y = self.G.dot(x)
    return (x, y)
