public void BuildStats() { int[] outcomes = outcomeAction.GetCounts(); int numCont = continuousConditions.Length; int numDisc = discreteConditions.Length; // Accumulate all the counts and sums foreach (Observation obs in obsTab) { int outcome = obs.outcome; for (int i = 0; i < numCont; i++) { int[] sum = continuousConditions[i].GetSums(); sum[outcome] += obs.continuousValues[i]; int[] sumSq = continuousConditions[i].GetSqSums(); sumSq[outcome] += obs.continuousValues[i] * obs.continuousValues[i]; } for (int i = 0; i < numDisc; i++) { int[,] count = discreteConditions[i].GetCounts(); int val = obs.discreteValues[i]; count[val, outcome]++; } outcomes[outcome]++; } for (int i = 0; i < numCont; i++) { continuousConditions[i].Init(outcomeAction); } for (int i = 0; i < numDisc; i++) { discreteConditions[i].CalcProps(outcomeAction); } outcomeAction.CalcProps(obsTab.Count); }