R語言技巧Rcpp與Eigen庫之間的相互轉(zhuǎn)換
當(dāng)我們在使用Rcpp時(shí),進(jìn)行矩陣運(yùn)算最簡單的是使用Eigen庫進(jìn)行相關(guān)操作,可以很輕松地講R中向量化與矩陣化的思想應(yīng)用到C++代碼上,從而對代碼進(jìn)行加速??蓞⒖记懊娴牟┛停?a target="_blank" href="http://www.fzitv.net/article/227483.htm">利用RcppEigen進(jìn)行矩陣運(yùn)算。
但有時(shí),我們卻必須使用Rcpp進(jìn)行DataFrame,List等對象格式的處理?;蛘呷绻覀兩婕暗饺笔е档奶幚?,也需要使用Rcpp中的函數(shù)來做。
所以,如何在兩種矩陣或向量格式,NumericVector/Matrix與VectorXd/MatrixXd之間相互轉(zhuǎn)化就變得非常重要。
我們可以首先使用Eigen庫中的VectorXd/MatrixXd對矩陣進(jìn)行運(yùn)算,然后再轉(zhuǎn)化為Rcpp中的NumericVector/Matrix,繼而我們便可使用Rcpp中的函數(shù)了。
具體做法其實(shí)參考了下面的文章:
具體解決方法
以一個(gè)最簡單的NumericMatrix轉(zhuǎn)化為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變?yōu)榱藢ο?code>A,如果之后需要進(jìn)行變換時(shí),需要將兩者進(jìn)行替換即可。
以上就是R語言技巧Rcpp與Eigen庫之間的相互轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Rcpp與Eigen庫之間的轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
R語言因子型數(shù)值轉(zhuǎn)數(shù)值型的操作
這篇文章主要介紹了R語言因子型數(shù)值轉(zhuǎn)數(shù)值型的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
R語言關(guān)于數(shù)據(jù)幀的知識點(diǎn)詳解
在本篇文章里小編給大家整理的是一篇關(guān)于R語言關(guān)于數(shù)據(jù)幀的知識點(diǎn)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-04-04

