def markov_gauss(): cov_params = rng.randn(num_data + 1, D_in, 2 * D_in) / 2.0 # (N+1)xDx2D Xcov = cov_params @ np.transpose(cov_params, (0, 2, 1)) # (N+1)xDxD Xcross = cov_params[:-1] @ np.transpose(cov_params[1:], (0, 2, 1)) # NxDxD Xcross = np.concatenate((Xcross, np.zeros((1, D_in, D_in))), 0) # (N+1)xDxD Xcov = np.stack([Xcov, Xcross]) # 2x(N+1)xDxD return MarkovGaussian(Xmu_markov, ctt(Xcov))
import gpflow from gpflow import inducing_variables, kernels from gpflow import mean_functions as mf from gpflow.config import default_float from gpflow.expectations import expectation, quadrature_expectation from gpflow.probability_distributions import DiagonalGaussian, Gaussian, MarkovGaussian rng = np.random.RandomState(1) RTOL = 1e-6 num_data = 5 num_ind = 4 D_in = 2 D_out = 2 Xmu = ctt(rng.randn(num_data, D_in)) Xmu_markov = ctt(rng.randn(num_data + 1, D_in)) # (N+1)xD Xcov = rng.randn(num_data, D_in, D_in) Xcov = ctt(Xcov @ np.transpose(Xcov, (0, 2, 1))) Z = rng.randn(num_ind, D_in) def markov_gauss(): cov_params = rng.randn(num_data + 1, D_in, 2 * D_in) / 2.0 # (N+1)xDx2D Xcov = cov_params @ np.transpose(cov_params, (0, 2, 1)) # (N+1)xDxD Xcross = cov_params[:-1] @ np.transpose(cov_params[1:], (0, 2, 1)) # NxDxD Xcross = np.concatenate((Xcross, np.zeros((1, D_in, D_in))), 0) # (N+1)xDxD Xcov = np.stack([Xcov, Xcross]) # 2x(N+1)xDxD return MarkovGaussian(Xmu_markov, ctt(Xcov))