C++ 查找矩阵的特征值和特征向量
c++ find eigenvalues and eigenvectors of matrix
我正在编写一个包含很多步骤(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++ 中的特征向量计算
- 在其特征向量上投影点云
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 动态分配特征向量的模因
- 特征向量与法巴德
- 将特征向量序列化为 QDataStream
- 为什么特征向量这么慢?
- C++ 查找矩阵的特征值和特征向量
- 特征向量对数无效使用不完整类型的错误
- 使用 c++ 特征库中的特征向量() 只计算一个特征向量
- 将特征向量复制到 C 数组
- SymEigsShiftSolver of Spectra是否不返回特征向量?
- 包含特征向量的类的奇异大小
- 将特征数组转换为特征向量
- 特征:如何将"greater than"的结果(在ArrayXf上)转换为特征向量
- 计算Armadillo中复杂对称矩阵的有限特征向量的正确函数
- 近似大型对称矩阵的最高3个特征值和特征向量的快速方法
- 按升序对特征向量Xf进行排序
- 特征向量矩阵右除问题
- 动态分配随机特征向量Xd