/// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="ProductWishartOp"]/message_doc[@name="ProductAverageConditional(Wishart, PositiveDefiniteMatrix, Gamma, Gamma, Wishart)"]/*'/> public static Wishart ProductAverageConditional(Wishart Product, PositiveDefiniteMatrix A, [SkipIfUniform] Gamma B, Gamma to_B, Wishart result) { if (B.IsPointMass) { return(ProductAverageConditional(A, B.Point, result)); } Gamma Bpost = B * to_B; // E[x] = a*E[b] // E[logdet(x)] = logdet(a) + d*E[log(b)] PositiveDefiniteMatrix m = new PositiveDefiniteMatrix(A.Rows, A.Cols); m.SetTo(A); m.Scale(Bpost.GetMean()); double meanLogDet = A.Rows * Bpost.GetMeanLog() + A.LogDeterminant(); if (m.LogDeterminant() < meanLogDet) { throw new MatrixSingularException(m); } Wishart.FromMeanAndMeanLogDeterminant(m, meanLogDet, result); result.SetToRatio(result, Product); return(result); }
/// <summary> /// Sets the state of this estimator from the specified estimator. /// </summary> /// <param name="value"></param> public void SetTo(MatrixMeanVarianceAccumulator value) { Mean.SetTo(value.Mean); Variance.SetTo(value.Variance); Count = value.Count; }
public void SetTo(VectorMeanVarianceAccumulator value) { mean.SetTo(value.mean); cov.SetTo(value.cov); count = value.count; }