public static float [,] covariance( float [][] data) { data = ToolsCollection.Transpose(data); int column_count = data.Length; float [,] covariance_array = new float [column_count, column_count]; float [] means = new float [column_count]; for (int index_column = 0; index_column < column_count; index_column++) { means[index_column] = ToolsMathStatistics.Mean(data[index_column]); } for (int index_column = 0; index_column < column_count; index_column++) { covariance_array[index_column, index_column] = ToolsMathCollectionFloat .covariance(data[index_column], data[index_column], means[index_column], means[index_column]); } for (int index_row = 0; index_row < column_count; index_row++) { for (int index_column = index_row + 1; index_column < column_count; index_column++) { float covariance = ToolsMathCollectionFloat .covariance(data[index_row], data[index_column], means[index_row], means[index_column]); covariance_array[index_row, index_column] = covariance; covariance_array[index_column, index_row] = covariance; } } return(covariance_array); }
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)); }