我在使用Rcpp
和RcppArmadillo
包编译此简单c++
代码时遇到了一些问题。采取以下简单的例子由数值标量相乘的矩阵的各列:在RcppArmadillo中将列向量乘以数字标量
code <- 'arma::mat out = Rcpp::as<arma::mat>(m);
for(int i = 0; i < out.n_cols; ++i){
out.col(i) *= v;
}
return Rcpp::wrap(out);'
试图使用这个编译...
require(RcppArmadillo)
armMult <- cxxfunction(signature(m = "numeric" , v = "numeric"),
code , plugin = "RcppArmadillo")
结果编译错误....
#error: no match for 'operator*=' in 'arma::Mat<eT>::col(arma::uword) [with eT = double, arma::uword = unsigned int](((unsigned int)i)) *= v'
但是,如果我们交换numeric
变量v
为2.0
如下....
code <- 'arma::mat out = Rcpp::as<arma::mat>(m);
for(int i = 0; i < out.n_cols; ++i){
out.col(i) *= 2.0; //Notice we use 2.0 instead of a variable
}
return Rcpp::wrap(out);'
它编译就好了....
armMult <- cxxfunction(signature(m="numeric"),
code,plugin="RcppArmadillo")
,然后我们可以做...
m <- matrix(1:4 , 2 , 2)
armMult(m)
[,1] [,2]
[1,] 2 6
[2,] 4 8
缺少什么我在这里?我如何使用简单的数字标量来完成这项工作。我想能够通过一个标量像...
armMult(m , 2.0)
并返回与上述相同的结果。
+1很好的回答!您也应该将其作为[***此问题***](http://stackoverflow.com/q/18349053/1478381)的答案。 –
或者如果您不太热衷,我会将其添加到我的答案中,并添加到其他答案的基准中。 –
当然!继续并添加它:-) – chris