Hi, Instead of posting this code to the list, a better idea is to write up your solution for RcppGallery. That way you can share code with a wider audience.
http://gallery.rcpp.org <http://gallery.rcpp.org/> Dale Smith dtsm...@mindspring.com > On Apr 3, 2015, at 8:02 AM, ogami musashi <urag...@hotmail.com> wrote: > > Hello Romain and Christian, > > Following christian advice on learning how to walk before running but taking > romain's hints i succeeded in writing a code that does the same permutation > but on a list of matrices. I had in fact always access the same nested list > element which is a matrix i simply created a new 1000 elements list with > matrices inside. > > The whole thing took 54 sec in cpp versus 28 minutes in R! So thank you! > > When i have time i'll try to see if working on list of list is possible. > > Anyway so that it may be of use for anyone that would encounter the same > problem here's my code: > > "#include <Rcpp.h> > using namespace Rcpp; > > // [[Rcpp::export]] > > List RearrangeList(List x){ > List output; > size_t ni=x.size(); > > NumericMatrix matout=x[0]; > int nrows=matout.nrow(); > int ncols=matout.ncol(); > > > > > //create matrixes in the output list > for (int k=0; k<ncols; k++) > { > NumericMatrix mat_init_out_i(nrows,x.size()); > output.push_back(mat_init_out_i); > > } > > //Permutation (needs same number of columns for all matrices in the list) > for (int j=0;j<ncols;j++) > { > > > NumericMatrix matx_bind(nrows,x.size()); > > > > for (int i=0;i<x.size();i++) > { > NumericMatrix matx=x[i]; > NumericVector vecx_i_j(matx.nrow()); > vecx_i_j=matx(_,j); > > matx_bind(_,i)=vecx_i_j; > } > //output.push_back(matx_bind); > output[j]=matx_bind; > } > > > > return output; > }" > > On 30/03/15 11:05, ogami musashi wrote: >> Hello >> >> I'm a Rcpp newbie, so sorry if the question is trivial. >> >> I have an R object which is a list of 1000 elements. Each elements is a >> result from a discrete wavelet transform (from package wmtsa) with 5 >> elements. One of them have a 50000 rows and 16 colums. >> >> The first level (1000) are in fact random signals of 50 000 days. On each of >> them i ran a DWT that separated each signal into 16 components (of >> decreasing frequency) for each day thus resulting in a 50000 days * 16 >> components matrix for each of the 1000 signals. >> >> I would like to sort it like that: for each component (a list of 16 >> elements) having for each day (50000 rows) the 1000 signals (1000 columns) >> >> >> here are the objects in R: >> >> dwtlist: 1000 elements * 5 elements* (50000*16) matrix >> sortdwtlist:16 elements*(50000*1000) matrix >> >> the code in R: >> >> for(i in 1:16){ >> >> for(j in 1:50000){ >> >> for (k in 1:1000){ >> >> sortdwtlist[[i]][j,k]<-dwtlist[[k]][[1]][j,i] >> } >> } >> } >> >> >> This takes about 27 minutes to complete. >> >> I thus tried to put in C++ using Rcpp (i'm using sourceCpp): >> >> #include <Rcpp.h> >> using namespace Rcpp; >> >> // [[Rcpp::export]] >> >> List rearrangelist(List x){ >> int ni=15; >> int nj=49999; >> int nk=999; >> List output; >> >> for (int i= 0 ; i<ni ; i++){ >> for (int j=0 ; j<nj ; j++) { >> for (int k=0 ; j<nk ; k++){ >> output[i](j,k)=x[k][0](j,i); >> } >> } >> } >> return output; >> } >> >> >> But it doesn't work. error stops at the line of permutation, so i'm sure >> there's something with the types inside the list. >> Can someone help me? >> >> Thank you! >> >> >> >> _______________________________________________ >> 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 > > _______________________________________________ > 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
_______________________________________________ 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