protected OnlinePearsonsRCalculator(OnlinePearsonsRCalculator original, Cloner cloner)
     : base(original, cloner)
 {
     covCalculator = cloner.Clone(original.covCalculator);
     sxCalculator  = cloner.Clone(original.sxCalculator);
     syCalculator  = cloner.Clone(original.syCalculator);
 }
        public static double Calculate(IEnumerable <double> first, IEnumerable <double> second, out OnlineCalculatorError errorState)
        {
            IEnumerator <double>       firstEnumerator      = first.GetEnumerator();
            IEnumerator <double>       secondEnumerator     = second.GetEnumerator();
            OnlineCovarianceCalculator covarianceCalculator = new OnlineCovarianceCalculator();

            // always move forward both enumerators (do not use short-circuit evaluation!)
            while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext())
            {
                double x = secondEnumerator.Current;
                double y = firstEnumerator.Current;
                covarianceCalculator.Add(x, y);
                if (covarianceCalculator.ErrorState != OnlineCalculatorError.None)
                {
                    break;
                }
            }

            // check if both enumerators are at the end to make sure both enumerations have the same length
            if (covarianceCalculator.ErrorState == OnlineCalculatorError.None &&
                (secondEnumerator.MoveNext() || firstEnumerator.MoveNext()))
            {
                throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
            }
            else
            {
                errorState = covarianceCalculator.ErrorState;
                return(covarianceCalculator.Covariance);
            }
        }
 public OnlineLinearScalingParameterCalculator()
 {
     targetMeanCalculator = new OnlineMeanAndVarianceCalculator();
     originalMeanAndVarianceCalculator  = new OnlineMeanAndVarianceCalculator();
     originalTargetCovarianceCalculator = new OnlineCovarianceCalculator();
     Reset();
 }
 protected OnlineLinearScalingParameterCalculator(OnlineLinearScalingParameterCalculator original, Cloner cloner)
     : base(original, cloner)
 {
     targetMeanCalculator = cloner.Clone(original.targetMeanCalculator);
     originalMeanAndVarianceCalculator  = cloner.Clone(original.originalMeanAndVarianceCalculator);
     originalTargetCovarianceCalculator = cloner.Clone(original.originalTargetCovarianceCalculator);
     // do not reset the calculators here
 }
 protected OnlineCovarianceCalculator(OnlineCovarianceCalculator original, Cloner cloner)
     : base(original, cloner)
 {
     Cn         = original.Cn;
     xMean      = original.xMean;
     yMean      = original.yMean;
     n          = original.n;
     errorState = original.errorState;
 }
    public static double Calculate(IEnumerable<double> first, IEnumerable<double> second, out OnlineCalculatorError errorState) {
      IEnumerator<double> firstEnumerator = first.GetEnumerator();
      IEnumerator<double> secondEnumerator = second.GetEnumerator();
      OnlineCovarianceCalculator covarianceCalculator = new OnlineCovarianceCalculator();

      // always move forward both enumerators (do not use short-circuit evaluation!)
      while (firstEnumerator.MoveNext() & secondEnumerator.MoveNext()) {
        double x = secondEnumerator.Current;
        double y = firstEnumerator.Current;
        covarianceCalculator.Add(x, y);
        if (covarianceCalculator.ErrorState != OnlineCalculatorError.None) break;
      }

      // check if both enumerators are at the end to make sure both enumerations have the same length
      if (covarianceCalculator.ErrorState == OnlineCalculatorError.None &&
          (secondEnumerator.MoveNext() || firstEnumerator.MoveNext())) {
        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
      } else {
        errorState = covarianceCalculator.ErrorState;
        return covarianceCalculator.Covariance;
      }
    }
 public OnlineLinearScalingParameterCalculator() {
   targetMeanCalculator = new OnlineMeanAndVarianceCalculator();
   originalMeanAndVarianceCalculator = new OnlineMeanAndVarianceCalculator();
   originalTargetCovarianceCalculator = new OnlineCovarianceCalculator();
   Reset();
 }