public IFunctionBijective <float [], float []> Generate(
            IList <float []> instances)
        {
            float[,] array            = ToolsCollection.ConvertToTable(instances);
            float[,] array_transposed = ToolsCollection.Transpose(array);
            float [] lower_bounds = new float [array_transposed.Length];
            float [] upper_bounds = new float [array_transposed.Length];

            for (int index = 0; index < array_transposed.Length; index++)
            {
                lower_bounds[index] = ToolsMathStatistics.QuantileSorted(array_transposed.Select1DIndex0(index), quantile);
                upper_bounds[index] = ToolsMathStatistics.QuantileSorted(array_transposed.Select1DIndex0(index), 1 - quantile);
            }
            return(new TransformRescale(lower_bounds, upper_bounds));
        }
        public void get_model(IList <int []> instances)
        {
            // Convert
            List <float []> instances_converted = new List <float []>();

            foreach (int [] instance in instances)
            {
                instances_converted.Add(ToolsCollection.ConvertToFloatArray(instance));
            }

            // Transform
            TransformWhiteningOld <Matrix <double> > transform = new TransformWhiteningOld <Matrix <double> >(new AlgebraLinearReal64MathNet(), ToolsCollection.ConvertToTable(instances_converted));
            IList <float[]> instances_transformed = new List <float[]>();

            foreach (float [] instance in instances_converted)
            {
                instances_transformed.Add(transform.Compute(instance));
            }

            // Cluster
            //IClusteringModel<float []> model = d_inner.get_model(instances_transformed); //TODO

            //return new KMeansDefaultWhiteningIntegerArrayModel(transform, model);
            //return null; // TODO
        }