Beispiel #1
0
        public double Aggregate(Cern.Colt.Function.DoubleDoubleFunction aggr, Cern.Colt.Function.DoubleFunction f)
        {
            int s = Size;

            if (s == 0)
            {
                return(Double.NaN);
            }
            double a = f(_elements[s - 1]);

            for (int i = s - 1; --i >= 0;)
            {
                a = aggr(a, f(_elements[i]));
            }
            return(a);
        }
        public DoubleMatrix2D Assign(Cern.Colt.Function.DoubleFunction function, Double multialpha = 1)
        {
            if (Cern.Jet.Math.Functions.EvaluateDoubleFunctionEquality(function, F1.Mult(multialpha)))
            {
                //if (function == F1.Mult()) { // x[i] = mult*x[i]
                //var mult = new Cern.Jet.Math.Mult();
                double alpha = multialpha; //((Cern.Jet.Math.Mult)function).multiplicator;
                if (alpha == 1)
                {
                    return(this);
                }
                if (alpha == 0)
                {
                    return(Assign(0));
                }
                if (double.IsNaN(alpha))
                {
                    return(Assign(alpha));                     // the funny definition of IsNaN()d This should better not happen.
                }
                double[] vals = Values.ToArray();
                for (int j = Values.Count; --j >= 0;)
                {
                    vals[j] *= alpha;
                }

                /*
                 * forEachNonZero(
                 *  new Cern.Colt.Function.IntIntDoubleFunction() {
                 *      public double apply(int i, int j, double value) {
                 *          return function(value);
                 *      }
                 *  }
                 * );
                 */
            }
            else
            {
                base.Assign(function);
            }
            return(this);
        }
        public DoubleMatrix2D Assign(Cern.Colt.Function.DoubleFunction function, Double multialpha = 1)
        {
            if (Cern.Jet.Math.Functions.EvaluateFunctionEquality(function.Method, F2.Mult.Method))
            {                              // x[i] = mult*x[i]
                double alpha = multialpha; //((Cern.Jet.Math.Mult)function).multiplicator;
                if (alpha == 1)
                {
                    return(this);
                }
                if (alpha == 0)
                {
                    return(Assign(0));
                }
                if (double.IsNaN(alpha))
                {
                    return(Assign(alpha));                     // the funny definition of IsNaN()d This should better not happen.
                }

                /*
                 * double[] vals = values.ToArray();
                 * for (int j=values.Count; --j >= 0; ) {
                 *  vals[j] *= alpha;
                 * }
                 */

                ForEachNonZero(
                    new Cern.Colt.Function.IntIntDoubleFunction((i, j, value) =>
                {
                    return(function(value));
                }
                                                                ));
            }
            else
            {
                base.Assign(function);
            }
            return(this);
        }
Beispiel #4
0
 public void Assign(DoubleMatrix2D A, Cern.Colt.Function.DoubleFunction function)
 {
     A.Assign(function);
 }