Le 17/08/10 02:43, Dirk Eddelbuettel a écrit :
Hi Christian, Thanks for your interest in Rcpp, and for posting here. On 16 August 2010 at 17:19, Christian Gunning wrote: | Dear list, | | I'm trying to use the ComplexVector class, and I'm having difficulty | with multiplication. I sugar multiplication, element-by-element | multiplication (no * operator for either), and using temporary | Rcomplex variables (don't really understand what I'm doing here). Well, NumericVector et al aren't really made for all possible math ops done on vectors, real or complex. They are first and foremost storage types.
Maybe that was true two months ago before the sugar rush. We just overlooked that we needed operator+(Rcomplex, Rcomplex), etc ...
see my direct response to Christian.
But for the math we do have Armadillo and RcppArmadillo. So in the short run, I would suggest the following two-step procedure: i) have a good look at Armadillo (http://arma.sf.net) and use the cx_mat or cx_vec types for mulitplication; write a small test program to see that everything works ii) use RcppArmadillo to from R via Rcpp / RcppArmadillo to this functionality | I was able to successfully import get("*") as an Rcpp::Function and do | the multiplication through R. Is this the best option for now? I am sure we can do better than this but I am not sure all pieces are in place just yet. Cheers, Dirk | Thanks, | Christian Gunning | University of New Mexico | | // doesn't work | SEXP rcpp_hello_world(SEXP i, SEXP ii){ | using namespace Rcpp ; | | ComplexVector y1(i), y2(ii); | int n(y1.size()), j; | ComplexVector y3(n), y4(n); | y3 = y1 * y2; // no operator | for (j = 0; j++; j<n) { | y4[j] = y1[j] + y2[j]; // no operator | } | List z = List::create( y1, y2, y3) ; | return z ; | } | | // does work, doing multiplication in R | SEXP mymult(SEXP input1, SEXP input2) { | Rcpp::Environment base("package:base"); | Rcpp::Function funbase = base["get"]; | SEXP funbase1 = funbase("*"); | Rcpp::Function funmult(funbase1); | Rcpp::ComplexVector xxa = funmult(input1, input2); | return xxa; | } | | SEXP rcpp_hello_world(SEXP i, SEXP ii){ | using namespace Rcpp ; | ComplexVector y3( mymult(i, ii) ); | return y3 ; | } | _______________________________________________ | Rcpp-devel mailing list | Rcpp-devel@lists.r-forge.r-project.org | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
-- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 http://romainfrancois.blog.free.fr |- http://bit.ly/bzoWrs : Rcpp svn revision 2000 |- http://bit.ly/b8VNE2 : Rcpp at LondonR, oct 5th `- http://bit.ly/aAyra4 : highlight 0.2-2 _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel