#ifndef MYGMM_H
#define MYGMM_H
#include <iostream>
#include <Eigen/Dense>
#include <math.h>
#include <vector>
#define EPS 0.00000001
using namespace std;
using namespace Eigen;
Eigen::MatrixXf getCov(Eigen::MatrixXf input)
{
// 按列求均值
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)
return (zeroMeanMat.adjoint() * zeroMeanMat) / double(input.rows());
else
return (zeroMeanMat.adjoint() * zeroMeanMat) / double(input.rows() - 1);
}
float GMM(Eigen::RowVectorXf u, Eigen::MatrixXf sigma, Eigen::RowVectorXf x)
{
float tmp = -0.5 * (x - u) * sigma.inverse() * (x - u).transpose();
return exp(tmp) / pow(2.0
C++高斯混合型GMM实现
最新推荐文章于 2025-01-04 00:15:00 发布