服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言技巧Rcpp与Eigen库之间的相互转换

R语言技巧Rcpp与Eigen库之间的相互转换

2022-01-20 15:51Kanny广小隶 R语言

这篇文章主要为大家介绍了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格式为例:

?
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变为了对象A,如果之后需要进行变换时,需要将两者进行替换即可。

以上就是R语言技巧Rcpp与Eigen库之间的相互转换的详细内容,更多关于Rcpp与Eigen库之间的转换的资料请关注服务器之家其它相关文章!

原文链接:https://kanny.blog.csdn.net/article/details/85055236

延伸 · 阅读

精彩推荐