[Rcpp-devel] Multiplication of ComplexVector?

Romain Francois romain at r-enthusiasts.com
Tue Aug 17 09:06:17 CEST 2010


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 at 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



More information about the Rcpp-devel mailing list