예제 #1
0
        internal double scale(double value, scaling.scale_function scale_function)
        {
            /*double non_zero, double abs_sum, double srsos, double column_min, double column_max, double average, double stdev,*/

            var sp = this;

            if (sp == null)
            {
                return(value);
            }

            switch (scale_function)
            {
            case scaling.scale_function.none: return(value);

            case scaling.scale_function.rescale:


                var x = (rescale_scale_max - rescale_scale_min) * (value - sp.column_min);
                var y = (sp.column_max - sp.column_min);
                var z = rescale_scale_min;

                if (y == 0)
                {
                    return(0);
                }

                var rescale = (x / y) + z;

                return(rescale);

            case scaling.scale_function.normalisation:

                if (sp.column_max - sp.column_min == 0)
                {
                    return(0);
                }

                var mean_norm = (value - sp.average) / (sp.column_max - sp.column_min);

                return(mean_norm);

            case scaling.scale_function.standardisation:

                if (sp.stdev == 0)
                {
                    return(0);
                }

                var standardisation = (value - sp.average) / sp.stdev;

                return(standardisation);

            case scaling.scale_function.L0_norm:

                if (sp.non_zero == 0)
                {
                    return(0);
                }

                return(value / sp.non_zero);

            case scaling.scale_function.L1_norm:

                if (sp.abs_sum == 0)
                {
                    return(0);
                }

                return(value / sp.abs_sum);

            case scaling.scale_function.L2_norm:

                if (sp.srsos == 0)
                {
                    return(0);
                }

                return(value / sp.srsos);

            default: throw new ArgumentOutOfRangeException(nameof(scale_function));     //return 0;
            }
        }
예제 #2
0
 internal double[] scale(double[] values, scaling.scale_function scale_function)
 {
     return(values.Select(a => scale(a, scale_function)).ToArray());
 }