[Rcpp-devel] row iterators in RcppArmadillo

Jonathan Fintzi fintzij at uw.edu
Thu Oct 13 00:39:08 CEST 2016


Hi Sokol,

Yes, that explains it. I ended up implementing the solution that you and
Dirk identified, which is to simply convert the vector 'v' to an armadillo
vector for the purpose of copying from it.

Thanks for the help!
Jon

On Wed, Oct 12, 2016 at 3:27 PM, Sokol Serguei <serguei.sokol at gmail.com>
wrote:

> Hi Jonathan,
>
> Jonathan Fintzi has written at  Wed, 12 Oct 2016 13:43:20 -0700
>
> Hello,
>
> I am trying to use the std::copy() function to copy elements from an
> Rcpp::NumericVector into rows of armadillo matrices. A simplified version
> of my code is as follows:
>
> cppFunction('void copyinto(Rcpp::NumericVector& v, arma::mat& d1,
> arma::mat& d2) {
>         std::copy(v.begin(), v.begin() + 3, d1.begin_row(0));
>         std::copy(v.begin() + 3, v.end(), d2.begin_row(0));
> }', depends = "RcppArmadillo")
>
> v <- runif(6)
> d1 <- matrix(0.0, 3,3)
> d2 <- matrix(0.0, 3,3)
>
> copyinto(v, d1, d2)
>
> However, when I attempt to compile the code, I receive a list of
> compilation errors including "no type named 'XXXXXX' in 'class
> arma::Mat<double>row_iterator", where XXXXXX is iterator_category,
> value_type, difference_type, pointer, and reference.
>
> If I change the iterators to column iterators (e.g. d1.begin_col(0))
> everything compiles and works just fine. I feel that I must be missing
> something quite basic here, but in searching around I haven't been able to
> identify my mistake.
>
> May be the problem is that you are trying to use std::copy for writing
> to non contiguous memory when you use a row pointer and the class writers
> were smart enough to prevent such situation.
>
> The following code works as expected, may be it can do the job for you:
>
> cppFunction('void copy2(arma::rowvec& v, arma::mat& d1, arma::mat& d2) {
>         d1.row(0)=v(arma::span(0,2));
>         d2.row(0)=v(arma::span(3,5));
> }', depends = "RcppArmadillo")
>
> v <- runif(6)
> d1 <- matrix(0.0, 3,3)
> d2 <- matrix(0.0, 3,3)
> copy2(v, d1, d2)
>
>
> Thank you for your help!
> Jon
>
>
> _______________________________________________
> Rcpp-devel mailing listRcpp-devel at lists.r-forge.r-project.orghttps://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
>
>
>
>
>
> _______________________________________________
> 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/20161012/cfbac81c/attachment.html>


More information about the Rcpp-devel mailing list