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; } }
internal double[] scale(double[] values, scaling.scale_function scale_function) { return(values.Select(a => scale(a, scale_function)).ToArray()); }