gpt4 book ai didi

C++ 求矩阵的特征值和特征向量

转载 作者:太空狗 更新时间:2023-10-29 22:55:47 25 4
gpt4 key购买 nike

我正在编写一个包含很多步骤的算法 (PCA),其中两个步骤是寻找给定矩阵的特征值和特征向量。

我不想为它编写整个代码,因为我知道这是一项漫长的工作,所以我为此搜索了一些临时代码,但只找到了 1 或 2 个库,起初我不想包含库,我不想转到 matlab。

是否有任何看起来不太难理解的算法/教程/代码?

最佳答案

如果有人需要这个,我是怎么做的

    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 ]

关于C++ 求矩阵的特征值和特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com