真的很困惑为什么使用 RcppArmadillo 的 QR 输出与 R 的 QR 输出不同;犰狳文档也没有给出明确的答案。本质上,当我给 R 一个矩阵 Y 是 n * q (比如 1000 X 20 ) 时,我会得到 Q ,它是 1000 X 20 和 R 20 X 1000。这就是我需要的。但是当我在犰狳中使用 QR 求解器时,它让我返回 Q 1000 X 1000 和 R 1000 X 20。我可以调用 R 的 qr 函数吗?我需要 Q 有维度 nxq,而不是 qx q。下面的代码是我正在使用的(它是更大功能的一部分)。
如果有人可以建议如何在 RcppEigen 中执行此操作,那也会很有帮助。
library(inline)
library(RcppArmadillo)
src <- '
Rcpp::NumericMatrix Xr(Xs);
int q = Rcpp::as<int>(ys);
int n = Xr.nrow(), k = Xr.ncol();
arma::mat X(Xr.begin(), n, k, false);
arma::mat G, Y, B;
G = arma::randn(n,q);
Y = X*G;
arma::mat Q, R;
arma::qr(Q,R,Y);
return Rcpp::List::create(Rcpp::Named("Q")=Q,Rcpp::Named("R")=R,Rcpp::Named("Y")=Y);'
rsvd <- cxxfunction(signature(Xs="numeric", ys="integer"), body=src, plugin="RcppArmadillo")