Rcpp:将向量组合到矩阵中并使用Rcout打印行

Rcpp:将向量组合到矩阵中并使用Rcout打印行,r,rcpp,R,Rcpp,我在Rcpp中有以下代码: NumericVector s_1 = NumericVector::create(0,0,-1,1,-1,1,1,-1,0); NumericVector s_2 = NumericVector::create(0,-1,0,-1,1,1,0,2,-2); // [[Rcpp::export]] void print_vecs(){ NumericMatrix mat(2,9); for (int i = 0 ; i < 2 ; i++){

我在Rcpp中有以下代码:

NumericVector s_1 = NumericVector::create(0,0,-1,1,-1,1,1,-1,0);
NumericVector s_2 = NumericVector::create(0,-1,0,-1,1,1,0,2,-2);


// [[Rcpp::export]]
void print_vecs(){
  NumericMatrix mat(2,9);
  for (int i = 0 ; i < 2 ; i++){
    Rcpp::Rcout << mat.row(i); // Not working Trying to print the row
  }
}

所以基本上我想看看如何把s1和s2组合成一个数值矩阵,然后遍历矩阵并打印行。还有Rcpp的简单教程吗?我找到了一些教程,但对我来说太高级了。谢谢您的帮助。

您可以这样做:

mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
Rf_PrintValue(mat) ;
您不能将矩阵的行发送到Rcpp::cout,您可以做的是打印矩阵,如下所示:

mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
Rf_PrintValue(mat) ;

您可以这样做:

mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
Rf_PrintValue(mat) ;
您不能将矩阵的行发送到Rcpp::cout,您可以做的是打印矩阵,如下所示:

mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
Rf_PrintValue(mat) ;

为了补充Romain的答案,Armadillo非常支持矩阵运算,并且可以通过RcppArmadillo轻松访问矩阵运算

以下是您的一个变体:

#include <RcppArmadillo.h>

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

// [[Rcpp::export]]
void printVecs(arma::rowvec v1, arma::rowvec v2) {
  arma::mat m(2,9);
  m.row(0) = v1;
  m.row(1) = v2;
  m.print("Matrix m");

  // or equally well (where you could also print v1 and/or v2
  Rcpp::Rcout << "Matrix M\n" << m; 
  }
}

/*** R
 v1 <- c(0,0,-1,1,-1,1,1,-1,0)
 v2 <- c(0,-1,0,-1,1,1,0,2,-2)
 printVecs(v1, v2)
*/
你可以直接找到它的来源

R> Rcpp::sourceCpp("/tmp/mat.cpp")

R>  v1 <- c(0,0,-1,1,-1,1,1,-1,0)

R>  v2 <- c(0,-1,0,-1,1,1,0,2,-2)

R>  printVecs(v1, v2)
Matrix m
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
Matrix M
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
R> 

至于你关于教程的问题:是的,有。使用搜索引擎;你应该找到很多。为了补充罗曼的答案,矩阵运算在犰狳中得到了很好的支持,并且可以通过RcppArmadillo轻松访问

以下是您的一个变体:

#include <RcppArmadillo.h>

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

// [[Rcpp::export]]
void printVecs(arma::rowvec v1, arma::rowvec v2) {
  arma::mat m(2,9);
  m.row(0) = v1;
  m.row(1) = v2;
  m.print("Matrix m");

  // or equally well (where you could also print v1 and/or v2
  Rcpp::Rcout << "Matrix M\n" << m; 
  }
}

/*** R
 v1 <- c(0,0,-1,1,-1,1,1,-1,0)
 v2 <- c(0,-1,0,-1,1,1,0,2,-2)
 printVecs(v1, v2)
*/
你可以直接找到它的来源

R> Rcpp::sourceCpp("/tmp/mat.cpp")

R>  v1 <- c(0,0,-1,1,-1,1,1,-1,0)

R>  v2 <- c(0,-1,0,-1,1,1,0,2,-2)

R>  printVecs(v1, v2)
Matrix m
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
Matrix M
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
R> 

至于你关于教程的问题:是的,有。使用搜索引擎;你应该找到很多。我也很喜欢这个。

谢谢。你知道初学者的教程吗?谢谢。你知道初学者的教程吗?谢谢。我知道你在Rcpp上付出了很多努力,再次为此表示感谢。我正在寻找最快的性能。RcppArmadillo中的操作是否比使用Rcpp NumericMatrix的常规操作更快?运行代码所需的时间不应有可测量的差异。但对于某些任务,我发现Armadillo比普通的Rcpp代码编写得更快,但有一个反例,我更喜欢Rcpp和sugar。选择其中一个或两个,学习其中一个或两个,然后继续实际完成工作。谢谢。我知道你在Rcpp上付出了很多努力,再次为此表示感谢。我正在寻找最快的性能。RcppArmadillo中的操作是否比使用Rcpp NumericMatrix的常规操作更快?运行代码所需的时间不应有可测量的差异。但对于某些任务,我发现Armadillo比普通的Rcpp代码编写得更快,但有一个反例,我更喜欢Rcpp和sugar。只需选择其中一个或两个,学习其中一个或两个,然后继续实际完成工作。