Eigen计算协方差矩阵

       本文主要介绍利用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
结果一致*/
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值