Hi Dirk, I take your point. Given that the conversion is essentially free, temporary conversion makes the most sense.
Thank you again! Jon On Wed, Oct 12, 2016 at 2:36 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > > Hi Jon, > > On 12 October 2016 at 14:20, Jonathan Fintzi wrote: > | Thanks for the quick response. In the broader project, the vector being > copied > | from is an Rcpp::NumericVector that contatenates vectorized versions of a > | number of other objects that are integrated numerically using the boost > odeint > | solvers. I couldn't quite get the numerical integrators to play nice with > | Armadillo objects, and in using std::copy I was trying to avoid > converting the > | vector 'v' to an arma::vec since I would have to convert it back for > further > | integration. Perhaps this was a mistake? > > Yes -- the transformation in as essentially costless. We have some > benchmarking that show that. > > | Still, I don't quite understand why armadillo row pointers don't work > which > | armadillo column pointers are fine. > > Now you phrase your question as "arma-only" (which makes sense) but that > is not what your code does, is it? > > I see that you are having an issue mixing things. So I suggest an easy > simplification. You are of course free to ignore that -- but you may then > have to provide another layer as the compiler so far appears to be unhappy. > > Dirk > > | Thanks, > | Jon > | > | On Wed, Oct 12, 2016 at 2:10 PM, Dirk Eddelbuettel <e...@debian.org> > wrote: > | > | > | On 12 October 2016 at 13:43, Jonathan Fintzi wrote: > | | 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") > | > | You should not need to mix an _Rcpp_ vector with an _Armadillo_ > matrix > | using > | std::copy. Check the decent Armadillo docs -- all the subsetting and > | slicing > | can be done with Armadillo. And that is what I would do. > | > | But maybe I didn't quite understand what you are really after. > | > | Dirk > | > | | 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. > | | > | | Thank you for your help! > | | Jon > | | _______________________________________________ > | | 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 > | > | -- > | http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org > | > | > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org >
_______________________________________________ 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