public static DVectorNormal ToJointGaussian(params IKEPDist[] msgs) { // Stack all messages to form a big Gaussian distribution Vector[] means = msgs.Select(dist => dist.GetMeanVector()).ToArray(); Matrix[] covs = msgs.Select(dist => dist.GetCovarianceMatrix()).ToArray(); Vector M = MatrixUtils.ConcatAll(means); Matrix V = MatrixUtils.BlkDiag(covs); DVectorNormal joint = new DVectorNormal(M, V); return(joint); }