[Rcpp-devel] RcppArmadillo matrix with writeable auxiliary memory

Steven Varga steven.varga at gmail.com
Tue Nov 26 22:47:50 CET 2013


arma::mat pointer method worked; while I trying to get the same result with
arma::mat view without copying data, or passing the entire matrix seemed to
be laborious.
The following patter provides read/write access to some memory location
using armadillo matrix operations.


/*
 * Contact: Steven Varga
 *          steven.varga at gmail.com
 *          2013 Toronto, On Canada
 */

#include <R.h>
#include <stdlib.h>
#include <RcppArmadillo.h>
using namespace std;

// [[Rcpp::depends(RcppArmadillo)]]
struct Example {

    Example(double *ptr) {

        A= new arma::mat(ptr, 3,2, false, true ); // no copy contstructor
                arma::mat &a = *A; // dereferencing A gets rid of A-> syntax
                a(1,1) = 1; // convenient matlab like syntax
    }

        ~Example(){ delete A; } // clean up
    arma::mat *A;
};

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
void  arma_example() {

    arma::mat M(3,10); // implicit memory allocation

    M.zeros(); // paint with zeros
    M.print(); cout<<endl<<endl;

    Example E(M.memptr());
    M.print(); // altered as planned
}
// EOF


On Tue, Nov 26, 2013 at 8:11 AM, Steven Varga <steven.varga at gmail.com>wrote:

> Thank you Simon for suggesting pointer then dereferencing it later in
> class methods.
>
> Dirk also suggested using matrix views which may have the same performance
> while keeping syntax neat.
>
> Will repost both working solution later on for the record.
>
> Thanks again, I found all suggestion very helpful,
> Steven
> On Nov 26, 2013 6:19 AM, <szehnder at uni-bonn.de> wrote:
>
>> Steve,
>>
>> If you want to use a variable being an arma::mat obejct with varying
>> memory, you could use an arma::mat pointer. Otherwise if memory stays the
>> same but should be reusable in R, Dirk's suggestion initialising memory in
>> R and passing it to C++ is the most practicable way and very fast.
>>
>> Best
>> Simon
>> Gesendet über den BlackBerry® Service von E-Plus.
>>
>> -----Original Message-----
>> From: Steven Varga <steven.varga at gmail.com>
>> Sender: rcpp-devel-bounces at lists.r-forge.r-project.orgDate: Mon, 25 Nov
>> 2013 23:23:24
>> To: <rcpp-devel at lists.r-forge.r-project.org>
>> Reply-To: steven.varga at gmail.com
>> Subject: Re: [Rcpp-devel] RcppArmadillo matrix with writeable auxiliary
>>         memory
>>
>> _______________________________________________
>> 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
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20131126/413501a5/attachment.html>


More information about the Rcpp-devel mailing list