Eigen计算协方差矩阵
2016-04-05 本文已影响1870人
daiw
今天遇到了一个求矩阵协方差的问题,记录如下
对于向量X,方差公式如下:
对于向量X, Y来说,协方差公式如下:
2.png
对于一个由n个列向量构成的矩阵,分别按列得到零均值的列向量X1,...Xn,协方差公式如下:
3.png因此利用C++中的eigen对协方差进行求解
//输入为Eigen::MatrixXf input 输出为covMat
//求取列向量均值
Eigen::MatrixXf meanVec = input.colwise().mean();
//求取上述的零均值列向量矩阵
Eigen::MatrixXf zeroMeanMat = input;
//将列向量均值从MatrixXf 转换为行向量 RowVectorXf
Eigen::RowVectorXf meanVecRow(Eigen::RowVecXf::Map(meanVec.data(),3));
zeroMeanMat.rowwise() -= meanVecRow;
//计算协方差
Eigen::MatrixXf covMat = (zeroMeanMat.adjoint()*zeroMeanMat)/double(input.rows()-1);
其中adjoint函数为求取矩阵的共轭转置,对于实系数矩阵来说为求取矩阵的转置