/// <summary> /// Euclidean distance with local parameters /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public double EuclidianDist(HistogramBinCollection x, HistogramBinCollection y) { //Square root of Sum of (x_i - y_i)^2 var result = x.Select((t, i) => Math.Pow(t.Value - y[i].Value, 2)).Sum(); return(Math.Sqrt(result)); }
public BinnedDistance(Distribution first, Distribution second, int numberOfBins) { var firstHist = new Histogram(); firstHist.Compute(first.Values, numberOfBins); _firstBins = firstHist.Bins; var secondHist = new Histogram(); secondHist.Compute(second.Values, numberOfBins); _secondBins = secondHist.Bins; }
/// <summary> /// Chi squared without fields, only local parameters, introduced for testing purposes on parallel execution /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public double ChiSquaredDistance(HistogramBinCollection x, HistogramBinCollection y) { Debug.WriteLineIf(x.Count == y.Count, "Error: Chi Squared Distance Comparison of Bins of different Length"); var result = 0.0; for (var i = 0; i < x.Count; i++) { var quot = Math.Pow(x[i].Value - y[i].Value, 2); double div = x[i].Value + y[i].Value; result += quot / div; } return(result / 2.0); }
public static double BinnedChi(HistogramBinCollection x, HistogramBinCollection y) { var result = 0.0; for (var i = 0; i < x.Count; i++) { var quot = Math.Pow(x[i].Value - y[i].Value, 2); double div = x[i].Value + y[i].Value; if (div != 0) { result += quot / div; } } return(result / 2.0); }
public BinnedDistance(Distribution first, Distribution second, DynamicHist dynamicHist, int currentEvolution) { var firstHisto = new Histogram(); var secondHisto = new Histogram(); if (dynamicHist.StartBins != 0 && dynamicHist.EndBins != 0) { var size = dynamicHist.GetBinSize(currentEvolution); firstHisto.Compute(first.Values, size); secondHisto.Compute(second.Values, size); _firstBins = firstHisto.Bins; _secondBins = secondHisto.Bins; return; } if (dynamicHist.UseCustomStatic) { firstHisto.Compute(first.Values, dynamicHist.CustomStaticSize); secondHisto.Compute(second.Values, dynamicHist.CustomStaticSize); _firstBins = firstHisto.Bins; _secondBins = secondHisto.Bins; return; } if (dynamicHist.UseScott) { firstHisto.AutoAdjustmentRule = BinAdjustmentRule.Scott; secondHisto.AutoAdjustmentRule = BinAdjustmentRule.Scott; } if (dynamicHist.UseSturges) { firstHisto.AutoAdjustmentRule = BinAdjustmentRule.Sturges; secondHisto.AutoAdjustmentRule = BinAdjustmentRule.Sturges; } firstHisto.Compute(first.Values); secondHisto.Compute(second.Values); _firstBins = firstHisto.Bins; _secondBins = secondHisto.Bins; }
public static double BinnedEuclidean(HistogramBinCollection x, HistogramBinCollection y) { var result = x.Select((t, i) => Math.Pow(t.Value - y[i].Value, 2)).Sum(); return(Math.Sqrt(result)); }
/// <summary> /// Initializes the histogram's bins. /// </summary> /// private void initialize(int numberOfBins) { this.binValues = new int[numberOfBins]; this.binRanges = new double[numberOfBins + 1]; HistogramBin[] bins = new HistogramBin[numberOfBins]; for (int i = 0; i < numberOfBins; i++) bins[i] = new HistogramBin(this, i); binCollection = new HistogramBinCollection(bins); }