Rcpp与Eigen库之间的转换

23 篇文章 4 订阅

当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻松地讲R中向量化与矩阵化的思想应用到C++代码上,从而对代码进行加速。可参考前面的博客:利用RcppEigen进行矩阵运算

但有时,我们却必须使用Rcpp进行DataFrameList等对象格式的处理。或者如果我们涉及到缺失值的处理,也需要使用Rcpp中的函数来做。

所以,如何在两种矩阵或向量格式,NumericVector/MatrixVectorXd/MatrixXd之间相互转化就变得非常重要。

我们可以首先使用Eigen库中的VectorXd/MatrixXd对矩阵进行运算,然后再转化为Rcpp中的NumericVector/Matrix,继而我们便可使用Rcpp中的函数了。

具体做法其实参考了下面的文章:


具体解决方法

以一个最简单的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,如果之后需要进行变换时,需要将两者进行替换即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值