首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cube<uword>时无法加载RcppArmadillo

使用Cube<uword>时无法加载RcppArmadillo
EN

Stack Overflow用户
提问于 2019-09-05 09:36:22
回答 1查看 243关注 0票数 0

我在C++上使用Armadillo库获得了令人喜爱的数据。程序的最终乘积是一个ucube,它是一个由无符号整数填充的立方体。运行之后,我希望将ucube加载到R,以执行一些最终的统计测试。为此,我创建了一个加载ucube返回数组的C++函数。

但这不管用!

我收到了以下警告:“B.bin中的警告:多维数据集::load():不正确的标题”,程序返回一个0x0x0数组。

为了找出原因,我制作了一个玩具C++程序,它运行得很好。它可以在没有任何问题的情况下加载立方体。

代码语言:javascript
复制
#include <iostream>
#include <armadillo>
using namespace arma;

void read_cubes(char const* A, char const* B){

    cube C;
    ucube D;

    C.load(A, arma_binary);
    D.load(B, arma_binary);

}   

int main(int argc, char** argv){

    cube A = randu<cube>(5,5,5);
    ucube B = randi<ucube>(5,5,5, distr_param(1, 10));

    A.save(argv[1], arma_binary);
    B.save(argv[2], arma_binary);

    read_cubes(argv[1], argv[2]);

}

但我不知道为什么,在R中做同样的步骤是行不通的。为了举例说明,请以./a.out A.bin B.bin的形式运行玩具程序。它将产生Cube<double> A.bin和Cube<uword> B.bin,稍后我将提到它们。

问题

如果我用Rcpp提供了以下C++代码::sourceCpp和我尝试用read_cube("A.bin")读取Cube<double> A.bin,但如果我使用read_ucube("B.bin")Cube<uword> B.bin执行同样的操作,则不会(我得到警告)。

代码语言:javascript
复制
#include <RcppArmadillo.h>
#include <iostream>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::cube read_cube(char const* x){
    arma::cube A;
    A.load(x, arma::arma_binary);
    return A;
}

// [[Rcpp::export]]
arma::ucube read_ucube(char const* x){
    arma::ucube B;
    B.load(x, arma::arma_binary);
    return B;
}

当然,我可以在结束Cube<uword>程序之前将Cube<double>转换为Cube<double>,但是我想知道为什么会发生这种情况,以及是否可以在RcppArmadillo中加载Cube<uword>。因为这应该是可能的,对吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 14:30:57

不幸的是,R仍然只支持32位整数,因此RcppArmadillo强制Armadillo使用32位整数。这是通过在包含armadillo头之前定义ARMA_32BIT_WORD来完成的。参见RcppArmadillo的配置这里

您可以在Armadillo程序中使用同样的“技巧”,如下所示:

代码语言:javascript
复制
#define ARMA_32BIT_WORD
#include <armadillo>

其中一个效果是ucube (Cube)将使用32位无符号整数。

完成上述操作后,重新编译Armadillo程序并再次保存ucubes。然后可以在RcppArmadillo中加载它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57802546

复制
相关文章

相似问题

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