程序员程序员的日常

Eigen计算协方差矩阵

2016-04-05  本文已影响1870人  daiw

今天遇到了一个求矩阵协方差的问题,记录如下
对于向量X,方差公式如下:

1.png

对于向量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函数为求取矩阵的共轭转置,对于实系数矩阵来说为求取矩阵的转置

上一篇下一篇

猜你喜欢

热点阅读