[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