如何在 Rcpp 中构建常量矩阵?
How to build a constant matrix in Rcpp?
我是Rcpp用户,在我的cpp文件中,我需要重复使用一个矩阵。我想定义一个常量矩阵,但我不知道该怎么做
我曾经在 Rcpp 中定义了一个常量双精度类型变量,它对我来说效果很好。但是当我对矩阵重复相同的方式时,
#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]
const int a[3][4] = {
{0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
// [[Rcpp::export]]
double tf(arma::mat x){
double aa=arma::sum(x+a);
return(aa);
}
出现以下错误
您错过了(非常棒,真的)Armadillo documentation 中的现有示例。
你错过了矩阵 returns 向量上的 sum()
。
您还错过了 as_scalar
在分配给标量时的(必需)使用。
随后是您的代码的修改和修复版本,以及输出。
代码
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// -- for { } init below
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
arma::mat getMatrix() {
const arma::mat a = { {0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
return a;
}
// [[Rcpp::export]]
double tf(arma::mat x){
double aa = arma::as_scalar(arma::sum(arma::sum(x+x)));
return(aa);
}
/*** R
tf( getMatrix() )
*/
输出
R> Rcpp::sourceCpp("~/git/Whosebug/57105625/answer.cpp")
R> tf( getMatrix() )
[1] 132
R>
我是Rcpp用户,在我的cpp文件中,我需要重复使用一个矩阵。我想定义一个常量矩阵,但我不知道该怎么做
我曾经在 Rcpp 中定义了一个常量双精度类型变量,它对我来说效果很好。但是当我对矩阵重复相同的方式时,
#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]
const int a[3][4] = {
{0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
// [[Rcpp::export]]
double tf(arma::mat x){
double aa=arma::sum(x+a);
return(aa);
}
出现以下错误
您错过了(非常棒,真的)Armadillo documentation 中的现有示例。
你错过了矩阵 returns 向量上的 sum()
。
您还错过了 as_scalar
在分配给标量时的(必需)使用。
随后是您的代码的修改和修复版本,以及输出。
代码
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// -- for { } init below
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
arma::mat getMatrix() {
const arma::mat a = { {0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
return a;
}
// [[Rcpp::export]]
double tf(arma::mat x){
double aa = arma::as_scalar(arma::sum(arma::sum(x+x)));
return(aa);
}
/*** R
tf( getMatrix() )
*/
输出
R> Rcpp::sourceCpp("~/git/Whosebug/57105625/answer.cpp")
R> tf( getMatrix() )
[1] 132
R>