C# 求数学网矩阵的协方差
我正在使用MathNet数字矩阵,试图找出矩阵的协方差 如何求矩阵的协方差 我们有一种在统计名称空间下求两个IEnumerable之间协方差的方法 但我不知道如何用它来寻找矩阵 例如:在matlab/倍频程中C# 求数学网矩阵的协方差,c#,statistics,covariance,math.net,mathnet-numerics,C#,Statistics,Covariance,Math.net,Mathnet Numerics,我正在使用MathNet数字矩阵,试图找出矩阵的协方差 如何求矩阵的协方差 我们有一种在统计名称空间下求两个IEnumerable之间协方差的方法 但我不知道如何用它来寻找矩阵 例如:在matlab/倍频程中 C#也是这样。我们如何实现???您可以使用Accord.Statistics nuget包中的Tools.convariance()方法 要这样做: using Accord.Statistics; public void CalculateMatrixCovariance() {
C#也是这样。我们如何实现???您可以使用Accord.Statistics nuget包中的Tools.convariance()方法
要这样做:
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]);
}
您可以在Accord.Statistics nuget包中使用Tools.convariance()方法
要这样做:
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]);
}
我认为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;
}
公共静态矩阵getCovariaceMatrix(矩阵)
{
var columnAverages=matrix.ColumnSums()/matrix.RowCount;
var centeredColumns=matrix.EnumerateColumns().Zip(columnAverages,(col,avg)=>col-avg);
var centered=列向量的密度矩阵(centeredColumns);
var normalizationFactor=matrix.RowCount==1?1:matrix.RowCount-1;
返回居中。TransposeThisAndMultiply(居中)/规格化因子;
}
我认为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;
}
公共静态矩阵getCovariaceMatrix(矩阵)
{
var columnAverages=matrix.ColumnSums()/matrix.RowCount;
var centeredColumns=matrix.EnumerateColumns().Zip(columnAverages,(col,avg)=>col-avg);
var centered=列向量的密度矩阵(centeredColumns);
var normalizationFactor=matrix.RowCount==1?1:matrix.RowCount-1;
返回居中。TransposeThisAndMultiply(居中)/规格化因子;
}