R語言技巧Rcpp與Eigen庫之間的相互轉換
當我們在使用Rcpp時,進行矩陣運算最簡單的是使用Eigen
庫進行相關操作,可以很輕松地講R中向量化與矩陣化的思想應用到C++代碼上,從而對代碼進行加速。可參考前面的博客:利用RcppEigen進行矩陣運算。
但有時,我們卻必須使用Rcpp
進行DataFrame,List等對象格式的處理。或者如果我們涉及到缺失值的處理,也需要使用Rcpp
中的函數來做。
所以,如何在兩種矩陣或向量格式,NumericVector/Matrix與VectorXd/MatrixXd之間相互轉化就變得非常重要。
我們可以首先使用Eigen
庫中的VectorXd/MatrixXd對矩陣進行運算,然後再轉化為Rcpp
中的NumericVector/Matrix,繼而我們便可使用Rcpp
中的函數瞭。
具體做法其實參考瞭下面的文章:
An Introduction to RcppEigen
Converting between NumericVector/Matrix and VectorXd/MatrixXd in Rcpp(Eigen) to perform Cholesky solve
具體解決方法
以一個最簡單的NumericMatrix轉化為MatrixXd格式為例:
// [[Rcpp::depends(RcppEigen)]] #include <Rcpp.h> #include <RcppEigen.h> using namespace Rcpp; using Eigen::Map; using Eigen::MatrixXd; using Rcpp::as; // [[Rcpp::export]] MatrixXd Test(NumericMatrix AA) { Map<Eigen::MatrixXd> A(as<Map<Eigen::MatrixXd> >(AA)); return(A); }
我們將對象AA
變為瞭對象A
,如果之後需要進行變換時,需要將兩者進行替換即可。
以上就是R語言技巧Rcpp與Eigen庫之間的相互轉換的詳細內容,更多關於Rcpp與Eigen庫之間的轉換的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Rcpp入門R代碼提速方法過程
- R語言學習RcppEigen進行矩陣運算
- R語言學習初識Rcpp類型List
- R語言學習Rcpp基礎知識全面整理
- R語言RcppEigen計算點乘與矩陣乘法連乘算法錯誤解決