我試圖使用本徵求解本徵庫中的R,以提高性能:R eigen求解器比Eigen的求解器要快嗎?
// [[Rcpp::export]]
MatrixXd Eigen4(const Map<MatrixXd> bM) {
SelfAdjointEigenSolver<MatrixXd> es(bM);
return(es.eigenvectors());
}
然而,在2000×2000矩陣比較時:
n <- 5e3
m <- 2e3
b <- crossprod(matrix(rnorm(n*m), n))
print(system.time(test <- Eigen4(b))) # 18 sec
print(system.time(test2 <- eigen(b, symmetric = TRUE))) # 8.5 sec
對於微基準的結果:
Unit: seconds
expr min lq mean median uq max neval
Eigen4(b) 18.614694 18.687407 19.136380 18.952063 19.292021 20.812116 10
eigen(b, symmetric = TRUE) 8.652628 8.663302 8.696543 8.676914 8.718517 8.831664 10
R是Eigen的兩倍? 我正在使用最新版本的R和RcppEigen。
我做錯了什麼?
可能是由於在'SEXP'和'MatrixXd'之間傳輸時複製造成的。你也應該使用像microbenchmark這樣的適當的基準測試工具。 – nrussell
我不認爲複製一個2000x2000矩陣需要10秒。 我添加了microbenchmark的結果。 –