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); }
// //cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj); public static float covariance( float [] array_0, float [] array_1) { float mean_0 = ToolsMathStatistics.Mean(array_0); float mean_1 = ToolsMathStatistics.Mean(array_1); float mean_product = MeanProduct(array_0, array_1); return(mean_product - (mean_0 * mean_1)); }
public static float [] means_row( float [][] array) { float [] means = new float [array.Length]; for (int index_row = 0; index_row < array.Length; index_row++) { means[index_row] = ToolsMathStatistics.Mean(array[index_row]); } return(means); }