Если кому-то это нужно, вот как я это сделал
Eigen::EigenSolver<Eigen::MatrixXf> eigensolver;
eigensolver.compute(covmat);
Eigen::VectorXf eigen_values = eigensolver.eigenvalues().real();
Eigen::MatrixXf eigen_vectors = eigensolver.eigenvectors().real();
std::vector<std::tuple<float, Eigen::VectorXf>> eigen_vectors_and_values;
for(int i=0; i<eigen_values.size(); i++){
std::tuple<float, Eigen::VectorXf> vec_and_val(eigen_values[i], eigen_vectors.row(i));
eigen_vectors_and_values.push_back(vec_and_val);
}
std::sort(eigen_vectors_and_values.begin(), eigen_vectors_and_values.end(),
[&](const std::tuple<float, Eigen::VectorXf>& a, const std::tuple<float, Eigen::VectorXf>& b) -> bool{
return std::get<0>(a) <= std::get<0>(b);
});
int index = 0;
for(auto const vect : eigen_vectors_and_values){
eigen_values(index) = std::get<0>(vect);
eigen_vectors.row(index) = std::get<1>(vect);
index++;
}
Здесь covmat , в котором нужно найти собственные векторы и собственные значения.Кроме того, я сортирую их в порядке убывания, который мы делаем большую часть времени.Одна важная вещь заключается в том, что при выборе того, какую методику собственного разложения следует использовать, будьте осторожны, потому что они не работают одинаково.Вы можете узнать больше информации здесь [https://eigen.tuxfamily.org/dox/group__Eigenvalues__Module.html]