Rcpp:将向量组合成矩阵并使用 Rcout 打印行
Rcpp: Combining Vectors into Matrix and printing rows using Rcout
我在 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
}
}
所以基本上我想看看如何将 s_1
和 s_2
组合成 NumericMatrix
,然后遍历矩阵并打印行。还有 Rcpp 的简单教程吗?我找到了一些教程,但它们对我来说太高级了。感谢您的帮助。
你可以这样做:
mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
您不能将矩阵的行发送到 Rcpp::cout
,您可以做的是打印矩阵,如下所示:
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>
关于您关于教程的问题:是的,有。使用搜索引擎;你应该找到很多。这个我也wrote a book.
我在 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
}
}
所以基本上我想看看如何将 s_1
和 s_2
组合成 NumericMatrix
,然后遍历矩阵并打印行。还有 Rcpp 的简单教程吗?我找到了一些教程,但它们对我来说太高级了。感谢您的帮助。
你可以这样做:
mat.row(0) = s_1 ;
mat.row(1) = s_2 ;
您不能将矩阵的行发送到 Rcpp::cout
,您可以做的是打印矩阵,如下所示:
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>
关于您关于教程的问题:是的,有。使用搜索引擎;你应该找到很多。这个我也wrote a book.