c++ - C++中的特征向量计算
问题描述
如何在 cpp 中创建函数以计算矩阵 M 的第一个“Q”特征向量?
我尝试使用此代码,但失败了。
#include <RcppArmadillo.h>
using namespace arma;
mat M;
int Q;
vec getEigen(M,Q) {
return eig_sym(M, Q);
}
错误消息说:
“没有匹配函数调用“arma::col(arma::mat&, int&)”
任何想法?我是 cpp 的新手,不知道消息的含义。
谢谢
解决方案
如评论中所述,Armadillo 中没有返回特征值子集的函数。但是,可以组合.head()
或提取子集。此外,使用 是有意义的,因为犰狳按升序返回特征值。为方便起见,我在这里使用带有Rcpp属性的 RcppArmadillo :.tail()
eigen_sym()
reverse()
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
// [[Rcpp::export]]
arma::vec getEigen(const arma::mat& M, int Q) {
return arma::reverse(arma::eig_sym(M).tail(Q));
}
/*** R
set.seed(42)
N <- 10
m <- matrix(rnorm(N * N), N, N)
m <- m + t(m)
getEigen(m, N/2)
*/
调用Rcpp::sourceCpp
文件时的输出:
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
// [[Rcpp::export]]
arma::vec getEigen(const arma::mat& M, int Q) {
return arma::reverse(arma::eig_sym(M).tail(Q));
}
/*** R
set.seed(42)
N <- 10
m <- matrix(rnorm(N * N), N, N)
m <- m + t(m)
getEigen(m, N/2)
*/
这仅适用于特征值,不适用于特征向量。不过,提取特征向量应该不难。
推荐阅读
- c# - C# 将 ListBox.SelectedItems 复制到另一个变量
- python - 循环通过 Base64 txt 文件批量转换为图像?
- react-select - 如何将 data-testid 属性添加到 react-select 组件
- javascript - 尝试在 foreach 循环内将一些 javascript 嵌入到 laravel 视图中
- python - 如何使用带有apollo-upload-client的graphene-file-upload将graphql中的文件上传到Python数据库并在前端做出反应。?
- python - 管理员端修改django
- mysql - sum 函数返回错误的值
- azure-devops - 有没有办法使用证书运行此 Azure Key Vault 任务(在 Azure DevOps 中)?
- php - 如何在 FullCalendar v4 中使用时间数据类型从数据库中获取事件
- maven - Maven / Tycho 构建失败,需要 'osgi.ee; (&(osgi.ee=JavaSE)(版本=1.8))'