[Rcpp-devel] Question concerning use of Raster in C vi Rcpp plugin and inline

Rainer M Krug r.m.krug at gmail.com
Wed Nov 17 11:45:30 CET 2010



On 11/17/2010 10:47 AM, Christian Gunning wrote:
> On Tue, Nov 16, 2010 at 4:00 AM,
> <rcpp-devel-request at lists.r-forge.r-project.org> wrote:
>>    for ( y in 1:maxy ) {
>>      cat(y, " ")
>>      for (x in 1:maxx) {
>>        s <- seeds[x:(x+dx2), y:(y+dy2)]
>>        if (all(is.na(s))) {
>>          dispSeeds[x,y] <- NA
>>        } else {
>>          dispSeeds[x,y] <- fx2(s, s, sd2D)
>>        }
>>      }
>>    }
> 
> If maxy and maxx are large, I'm *guessing* that you could see
> significant speed improvements from pushing these inner loops in the
> C++ code.  Of course, profiling is always a nice way to *see* the
> difference!

True - that is what I am duion, and that is the ultimate idea (and I am
there): to have all loops in C++.

> 
> Ultimately, you'll want to control the random number seed from within
> your C++ function.  See previous posts on the mailing list for
> examples.

Yes - I included that.

> 
> "You attached below a file named disp.cpp, which indicates to me that
> your c code is in a separate file - is this the case? And if yes, how
> can I do that with the inline command? Or do I have to compile
> externally and use Rcpp directly?"
> 
> Honestly, if you plan to develop and use this extensively, make a
> package with Rcpp.package.skeleton or RcppArmadillo.package.skeleton,
> and drop said file there.  Much easier to edit, debug, and ultimately
> document. See vignette('Rcpp-package', package='Rcpp') for details.

I will - especially as I don't know if there is gcc installed on the
cluster - I will see.

> 
> Lastly,
> For "s <- seeds[x:(x+dx2), y:(y+dy2)]" :
> Look at RcppArmadillo - If you turn seeds into a arma::matrix, you can
> use arma's accessors to get native sub-raster access, something like
> this, for an Rseeds input matrix to the c++ function:
> 
> NumericMatrix cseeds(Rseeds);
> arma::mat aseeds(cseeds.begin(), cseeds.nrow(), cseeds.ncol());
> ...
>     s = aseeds.submat( x, y, x+dx2, y+dy2 )
> ...
> For details, see http://arma.sourceforge.net/docs.html#submat

Sounds interesting, and that is exactly what I was looking for initially
- but for what I am doing, the code posted by Douglas should be faster,
as I have to loop over the matrix anyway, cell by cell.

Cheers,

Rainer
> 
> best,
> Christian, who is finding the Rcpp mailing list this week a
> fascinating distraction from comprehensive exams.




More information about the Rcpp-devel mailing list