當我們在使用Rcpp時,進行矩陣運算最簡單的是使用Eigen
庫進行相關操作,可以很輕松地講R中向量化與矩陣化的思想應用到C++代碼上,從而對代碼進行加速。可參考前面的博客:利用RcppEigen進行矩陣運算。
但有時,我們卻必須使用Rcpp
進行DataFrame,List等對象格式的處理。或者如果我們涉及到缺失值的處理,也需要使用Rcpp
中的函數來做。
所以,如何在兩種矩陣或向量格式,NumericVector/Matrix與VectorXd/MatrixXd之間相互轉化就變得非常重要。
我們可以首先使用Eigen
庫中的VectorXd/MatrixXd對矩陣進行運算,然后再轉化為Rcpp
中的NumericVector/Matrix,繼而我們便可使用Rcpp
中的函數了。
具體做法其實參考了下面的文章:
具體解決方法
以一個最簡單的NumericMatrix轉化為MatrixXd格式為例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// [[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
變?yōu)榱藢ο?code>A,如果之后需要進行變換時,需要將兩者進行替換即可。
以上就是R語言技巧Rcpp與Eigen庫之間的相互轉換的詳細內容,更多關于Rcpp與Eigen庫之間的轉換的資料請關注服務器之家其它相關文章!
原文鏈接:https://kanny.blog.csdn.net/article/details/85055236