首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以将Eigen::VectorXi转换为Eigen::VectorXd吗?

我可以将Eigen::VectorXi转换为Eigen::VectorXd吗?
EN

Stack Overflow用户
提问于 2012-11-19 23:01:46
回答 1查看 925关注 0票数 0

我在R上使用RcppEigen,我想从R层取一个双向量:

代码语言:javascript
复制
RcppExport SEXP testfunc (SEXP a) {
    const Eigen::Map<Eigen::VectorXd> vecD(as<Eigen::Map<Eigen::VectorXd> >(a));

但是,number是整型的,所以我需要像这样获取整型:

代码语言:javascript
复制
RcppExport SEXP testfunc (SEXP a) {
    const Eigen::Map<Eigen::VectorXi> vecD(as<Eigen::Map<Eigen::VectorXi> >(a));

所以,我需要把它转换成双倍数。我可以将Eigen::VectorXi转换为Eigen::VectorXd吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 01:31:51

当你指的是numeric,也就是double,或者反之亦然时,你确定你没有混淆从R调用integer吗?没有理由不使用两个函数,或者在函数内部进行调度。

例如,考虑这里的代码(使用Rcpp 0.10.0特性)

代码语言:javascript
复制
#include <RcppEigen.h>

// [[Rcpp::depends(RcppEigen)]]

// [[Rcpp::export]]
double vecdSum(SEXP x) {
    const Eigen::Map<Eigen::VectorXd> 
       vec(Rcpp::as<Eigen::Map<Eigen::VectorXd> >(x));
    return vec.sum();
}

// [[Rcpp::export]]
int veciSum(SEXP x) {
    const Eigen::Map<Eigen::VectorXi> 
       vec(Rcpp::as<Eigen::Map<Eigen::VectorXi> >(x));
    return vec.sum();
}

我们可以很容易地通过

代码语言:javascript
复制
R> sourceCpp('/tmp/vecsums.cpp')    # Rcpp 0.10.0 adds this
R> veciSum(c(1L, 2L, 3L))
[1] 6
R> vecdSum(c(1, 2, 3))
[1] 6
R>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13456401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档