Eigen计算协方差矩阵

时间:2021-04-16 00:38:07

       本文主要介绍利用Eigen求解协方差矩阵。协方差矩阵的形式和数学意义这里就不再过多介绍了。Eigen代码如下:

#include<iostream>
#include<Eigen/dense>
using namespace std;
using namespace Eigen;
int main()
{
//输入为input,输出为input的协方差矩阵covMat
Eigen::MatrixXf input(3,3);
input<<1,22,3,4,55,6,7,23,9;

Eigen::MatrixXf meanVec = input.colwise().mean();
Eigen::RowVectorXf meanVecRow(Eigen::RowVectorXf::Map(meanVec.data(),input.cols()));

Eigen::MatrixXf zeroMeanMat = input;
zeroMeanMat.rowwise()-=meanVecRow;
if(input.rows()==1)
Eigen::MatrixXf covMat = (zeroMeanMat.adjoint()*zeroMeanMat)/double(input.rows());
else
Eigen::MatrixXf covMat = (zeroMeanMat.adjoint()*zeroMeanMat)/double(input.rows()-1);

cout<<covMat<<endl;
}
/*利用g++编译输出结果:
9 1.5 9
1.5 352.333 1.5
9 1.5 9
MATLAB:
>> cov(input)

ans =

9.0000 1.5000 9.0000
1.5000 352.3333 1.5000
9.0000 1.5000 9.0000
结果一致*/