【问题标题】:Find covariance of Math Net matrix求数学网络矩阵的协方差
【发布时间】:2015-08-27 18:33:22
【问题描述】:
【问题讨论】:
标签:
c#
statistics
covariance
math.net
mathnet-numerics
【解决方案1】:
我认为 Math.NET 中没有任何方法可以模仿 Matlab/Octave 中的 cov 函数,但您可以轻松编写自己的方法:
public static Matrix<double> GetCovarianceMatrix(Matrix<double> matrix)
{
var columnAverages = matrix.ColumnSums() / matrix.RowCount;
var centeredColumns = matrix.EnumerateColumns().Zip(columnAverages, (col, avg) => col - avg);
var centered = DenseMatrix.OfColumnVectors(centeredColumns);
var normalizationFactor = matrix.RowCount == 1 ? 1 : matrix.RowCount - 1;
return centered.TransposeThisAndMultiply(centered) / normalizationFactor;
}
【解决方案2】:
您可以使用 Accord.Statistics nuget 包中的 Tools.Covariance() 方法。 http://accord-framework.net/docs/html/M_Accord_Statistics_Tools_Covariance.htm
做这样的事情:
using Accord.Statistics;
public void CalculateMatrixCovariance()
{
var matrix = new double[,] {
{3,5},
{9,10}};
var covMatrix = matrix.Covariance();
Console.WriteLine(covMatrix[0,0] + " " + covMatrix[0, 1]);
Console.WriteLine(covMatrix[1,0] + " " + covMatrix[1, 1]);
}