/// <summary> /// Registers the occurrence of a value. /// </summary> /// /// <param name="value">The value to be registered.</param> /// public void Push(int value) { if (!Started) { for (int i = 0; i < Current.Length; i++) { Current[i] = Model.LogInitial[i] + Model.LogEmissions[i][value]; } Started = true; } else { for (int i = 0; i < Current.Length; i++) { previous[i] = Current[i]; } for (int i = 0; i < Current.Length; i++) { double sum = Double.NegativeInfinity; for (int j = 0; j < previous.Length; j++) { sum = Special.LogSum(sum, previous[j] + Model.LogTransitions[j][i]); } Current[i] = sum + Model.LogEmissions[i][value]; } } _base.Invalidate(); }
/// <summary> /// Registers the occurrence of a value. /// </summary> /// /// <param name="value">The value to be registered.</param> /// public void Push(params double[] value) { if (!Started) { for (int i = 0; i < Current.Length; i++) { Current[i] = Model.Probabilities[i] + Model.Emissions[i].LogProbabilityFunction(value); } Started = true; } else { for (int i = 0; i < Current.Length; i++) { previous[i] = Current[i]; } for (int i = 0; i < Current.Length; i++) { double sum = Double.NegativeInfinity; for (int j = 0; j < previous.Length; j++) { sum = Special.LogSum(sum, previous[j] + Model.Transitions[j, i]); } Current[i] = sum + Model.Emissions[i].LogProbabilityFunction(value); } } _base.Invalidate(); }