Eigen计算协方差矩阵

今天遇到了一个求矩阵协方差的问题,记录如下
对于向量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函数为求取矩阵的共轭转置,对于实系数矩阵来说为求取矩阵的转置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容