Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 求数学网矩阵的协方差_C#_Statistics_Covariance_Math.net_Mathnet Numerics - Fatal编程技术网

C# 求数学网矩阵的协方差

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() {

我正在使用MathNet数字矩阵,试图找出矩阵的协方差

如何求矩阵的协方差

我们有一种在统计名称空间下求两个IEnumerable之间协方差的方法

但我不知道如何用它来寻找矩阵

例如:在matlab/倍频程中


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(居中)/规格化因子;
}