Arrays 在Rcpp中使用arma::cube制作3d数组显示立方体错误
我正在为Gibbs采样制作Rcpp代码。在代码中,我首先要创建一个三维数组,行数=迭代次数(500),列数=参数数(4),切片数=链数(3)。我是这样写的:Arrays 在Rcpp中使用arma::cube制作3d数组显示立方体错误,arrays,r,rcpp,bayesian,Arrays,R,Rcpp,Bayesian,我正在为Gibbs采样制作Rcpp代码。在代码中,我首先要创建一个三维数组,行数=迭代次数(500),列数=参数数(4),切片数=链数(3)。我是这样写的: #include <RcppArmadillo.h> #include <math.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp; using namespace std; using namespace arma; //Gibbs s
#include <RcppArmadillo.h>
#include <math.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace std;
using namespace arma;
//Gibbs sampling code starts here
Rcpp::List mcmc(const int iter,const int chains, const NumericVector data){
arma::cube posteriorC = arma::zeros(iter, 5, chains);
\\ rest of the codes
List out(Rcpp::List::create(Rcpp::Named("posteriorC") =posteriorC));
return out;
}
。我想知道制作3D阵列时是否有任何错误请注意,我希望获得模型的5个参数的估计值。您需要指定
arma::zeros
的模板,以正确填充arma::cube
,c.f
生成元素设置为零的向量、矩阵或立方体
用法:
v型向量=零(n元素)
X型矩阵=零(n行,n列)
Y型矩阵=零(大小(X))
cube\u type Q=0(n行、n列、n片)
cube\u type R=0(大小(Q))
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List mcmc(const int iter, const int chains,
const Rcpp::NumericVector data){
arma::cube posteriorC = arma::zeros<arma::cube>(iter, 5, chains);
// --------------------------------- ^^^^^^^^
// Not Shown
Rcpp::List out = Rcpp::List::create(Rcpp::Named("posteriorC") =posteriorC);
return out;
}
#包括
//[[Rcpp::depends(RcppArmadillo)]]
//[[Rcpp::导出]]
Rcpp::列出mcmc(常数整数,常数整数链,
常量Rcpp::数值向量数据){
arma::立方体后验概率=arma::零(iter,5,链);
// --------------------------------- ^^^^^^^^
//未显示
Rcpp::List out=Rcpp::List::create(Rcpp::Named(“posteriorC”)=posteriorC);
返回;
}
最后两项说明:
arma::cube
切片时,可能需要增加该值以防止越界李>
Rcpp::List out
的方式不太正确。通常,创建列表的最佳方法是:Rcpp::list out=Rcpp::list::create(Rcpp::Named(“Blah”),Blah)代码>
@不穿上衣,非常感谢。但这对我不起作用(.在编写或编译时没有显示任何错误。我可以同时使用arma::cube和Rcpp::NumericVector吗?或者我一直只需要使用arma???@gultu我对MCMC例程中发生的事情没有任何线索,因为您忽略了它。我无法诊断为什么它对您不起作用,因为我所拥有的信息非常稀少,并且与您的MCMC例程直接相关<代码> ARMA::Cube :“无代码,主代码很长,很复杂。我要把它放在这里吗?”Gultuu在这种情况下只需切换<代码> RCPP::MigultValue/Cube >到<代码> ARMA::Cube 。假设你正在将一个3D R数组传递给C++。@ CouTabess,我不明白。我可以向你展示我的完整代码吗?我不知道怎么做。
Error: Cube::operator(): index out of bounds
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List mcmc(const int iter, const int chains,
const Rcpp::NumericVector data){
arma::cube posteriorC = arma::zeros<arma::cube>(iter, 5, chains);
// --------------------------------- ^^^^^^^^
// Not Shown
Rcpp::List out = Rcpp::List::create(Rcpp::Named("posteriorC") =posteriorC);
return out;
}