Eigen计算协方差矩阵

作者: daiw | 来源:发表于2016-04-05 10:56 被阅读1870次

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

    相关文章

      网友评论

        本文标题:Eigen计算协方差矩阵

        本文链接:https://www.haomeiwen.com/subject/nirplttx.html