示例#1
0
        /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="SubarrayOp{T}"]/message_doc[@name="LogAverageFactor{DistributionType}(IReadOnlyList{DistributionType}, IReadOnlyList{DistributionType}, IReadOnlyList{int})"]/*'/>
        /// <typeparam name="DistributionType">The type of a distribution over an array item.</typeparam>
        public static double LogAverageFactor <DistributionType>(IReadOnlyList <DistributionType> items, IReadOnlyList <DistributionType> array, IReadOnlyList <int> indices)
            where DistributionType : CanGetLogAverageOf <DistributionType>
        {
            AssertWhenDebugging.Distinct(indices);
            double z = 0.0;

            for (int i = 0; i < indices.Count; i++)
            {
                z += array[indices[i]].GetLogAverageOf(items[i]);
            }
            return(z);
        }
示例#2
0
 /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="SubarrayOp{T}"]/message_doc[@name="ArrayAverageConditional{DistributionType, ArrayType}(IReadOnlyList{DistributionType}, IReadOnlyList{int}, ArrayType)"]/*'/>
 /// <typeparam name="DistributionType">The type of a distribution over an array item.</typeparam>
 /// <typeparam name="ArrayType">The type of the outgoing message.</typeparam>
 public static ArrayType ArrayAverageConditional <DistributionType, ArrayType>([SkipIfAllUniform] IReadOnlyList <DistributionType> items, IReadOnlyList <int> indices, ArrayType result)
     where ArrayType : IList <DistributionType>, SettableToUniform
     where DistributionType : SettableTo <DistributionType>
 {
     Assert.IsTrue(items.Count == indices.Count, "items.Count != indices.Count");
     AssertWhenDebugging.Distinct(indices);
     result.SetToUniform();
     for (int i = 0; i < indices.Count; i++)
     {
         DistributionType value = result[indices[i]];
         value.SetTo(items[i]);
         result[indices[i]] = value;
     }
     return(result);
 }
示例#3
0
 /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="SubarrayOp{T}"]/message_doc[@name="ArrayAverageConditional{DistributionType, ArrayType}(IReadOnlyList{T}, IReadOnlyList{int}, ArrayType)"]/*'/>
 /// <typeparam name="DistributionType">The type of a distribution over an array item.</typeparam>
 /// <typeparam name="ArrayType">The type of the outgoing message.</typeparam>
 public static ArrayType ArrayAverageConditional <DistributionType, ArrayType>(IReadOnlyList <T> items, IReadOnlyList <int> indices, ArrayType result)
     where ArrayType : IList <DistributionType>, SettableToUniform
     where DistributionType : HasPoint <T>
 {
     if (items.Count != indices.Count)
     {
         throw new ArgumentException(indices.Count + " indices were given to Subarray but the output array has length " + items.Count);
     }
     AssertWhenDebugging.Distinct(indices);
     result.SetToUniform();
     for (int i = 0; i < indices.Count; i++)
     {
         DistributionType value = result[indices[i]];
         value.Point        = items[i];
         result[indices[i]] = value;
     }
     return(result);
 }