示例#1
0
        /// <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));
        }
示例#2
0
        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;
        }
示例#3
0
        /// <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);
        }
示例#4
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);
        }
示例#5
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;
        }
示例#6
0
        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));
        }
示例#7
0
        /// <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);
        }