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其它相關文章!

推薦閱讀: