예제 #1
0
        private void RebuildDataTable(string resultName, string rowName)
        {
            LinearLeastSquaresFitting llsFitting = new LinearLeastSquaresFitting();

            string[] columnNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile",
                                                  "Avg. of Upper 25 %", " Avg. of Lower 25 %", "Avg. of First 25 %", "Avg. of Last 25 %", "Slope", "Intercept", "Average Relative Error" };

            runs = Content.Where(x => x.Results.ContainsKey(resultName) && x.Visible).ToList();
            DoubleMatrix dt = new DoubleMatrix(runs.Count(), columnNames.Count());

            dt.RowNames    = runs.Select(x => x.Name);
            dt.ColumnNames = columnNames;

            int i = 0;

            foreach (Run run in runs)
            {
                DataTable resTable = (DataTable)run.Results[resultName];
                dt.SortableView = true;
                DataRow row    = resTable.Rows[rowName];
                var     values = row.Values.ToArray();

                double cnt = values.Count();
                double min = values.Min();
                double max = values.Max();
                double avg = values.Average();
                double median = values.Median();
                double stdDev = values.StandardDeviation();
                double variance = values.Variance();
                double percentile25 = values.Quantile(0.25);
                double percentile75 = values.Quantile(0.75);
                double lowerAvg = values.Count() > 4 ? values.OrderBy(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
                double upperAvg = values.Count() > 4 ? values.OrderByDescending(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
                double firstAvg = values.Count() > 4 ? values.Take((int)(values.Count() * 0.25)).Average() : double.NaN;
                double lastAvg = values.Count() > 4 ? values.Skip((int)(values.Count() * 0.75)).Average() : double.NaN;
                double slope, intercept, r;
                llsFitting.Calculate(values, out slope, out intercept);
                r = llsFitting.CalculateError(values, slope, intercept);

                dt[i, 0]  = cnt;
                dt[i, 1]  = min;
                dt[i, 2]  = max;
                dt[i, 3]  = avg;
                dt[i, 4]  = median;
                dt[i, 5]  = stdDev;
                dt[i, 6]  = variance;
                dt[i, 7]  = percentile25;
                dt[i, 8]  = percentile75;
                dt[i, 9]  = upperAvg;
                dt[i, 10] = lowerAvg;
                dt[i, 11] = firstAvg;
                dt[i, 12] = lastAvg;
                dt[i, 13] = slope;
                dt[i, 14] = intercept;
                dt[i, 15] = r;

                i++;
                progress.ProgressValue = ((double)runs.Count) / i;
            }
            stringConvertibleMatrixView.Content = dt;

            for (i = 0; i < runs.Count(); i++)
            {
                stringConvertibleMatrixView.DataGridView.Rows[i].DefaultCellStyle.ForeColor = runs[i].Color;
            }
        }
예제 #2
0
    private void RebuildDataTable(string resultName, string rowName) {
      LinearLeastSquaresFitting llsFitting = new LinearLeastSquaresFitting();
      string[] columnNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile",
        "Avg. of Upper 25 %", " Avg. of Lower 25 %", "Avg. of First 25 %", "Avg. of Last 25 %", "Slope", "Intercept", "Average Relative Error" };

      runs = Content.Where(x => x.Results.ContainsKey(resultName) && x.Visible).ToList();
      DoubleMatrix dt = new DoubleMatrix(runs.Count(), columnNames.Count());
      dt.RowNames = runs.Select(x => x.Name);
      dt.ColumnNames = columnNames;

      int i = 0;
      foreach (Run run in runs) {
        DataTable resTable = (DataTable)run.Results[resultName];
        dt.SortableView = true;
        DataRow row = resTable.Rows[rowName];
        var values = row.Values.ToArray();

        double cnt = values.Count();
        double min = values.Min();
        double max = values.Max();
        double avg = values.Average();
        double median = values.Median();
        double stdDev = values.StandardDeviation();
        double variance = values.Variance();
        double percentile25 = values.Quantile(0.25);
        double percentile75 = values.Quantile(0.75);
        double lowerAvg = values.Count() > 4 ? values.OrderBy(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
        double upperAvg = values.Count() > 4 ? values.OrderByDescending(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
        double firstAvg = values.Count() > 4 ? values.Take((int)(values.Count() * 0.25)).Average() : double.NaN;
        double lastAvg = values.Count() > 4 ? values.Skip((int)(values.Count() * 0.75)).Average() : double.NaN;
        double slope, intercept, r;
        llsFitting.Calculate(values, out slope, out intercept);
        r = llsFitting.CalculateError(values, slope, intercept);

        dt[i, 0] = cnt;
        dt[i, 1] = min;
        dt[i, 2] = max;
        dt[i, 3] = avg;
        dt[i, 4] = median;
        dt[i, 5] = stdDev;
        dt[i, 6] = variance;
        dt[i, 7] = percentile25;
        dt[i, 8] = percentile75;
        dt[i, 9] = upperAvg;
        dt[i, 10] = lowerAvg;
        dt[i, 11] = firstAvg;
        dt[i, 12] = lastAvg;
        dt[i, 13] = slope;
        dt[i, 14] = intercept;
        dt[i, 15] = r;

        i++;
        progress.ProgressValue = ((double)runs.Count) / i;
      }
      stringConvertibleMatrixView.Content = dt;

      for (i = 0; i < runs.Count(); i++) {
        stringConvertibleMatrixView.DataGridView.Rows[i].DefaultCellStyle.ForeColor = runs[i].Color;
      }
    }