[Rcpp-devel] list of matrices to Eigen matrices
Dirk Eddelbuettel
edd at debian.org
Wed Mar 20 19:16:19 CET 2013
Mark,
On 20 March 2013 at 13:03, M A wrote:
| I have a list of matrices in R which I want to turn into a bunch of
| Eigen matrices using RcppEigen. I found a way to do this, but it seems
| unnecessarily tortured. Here's what I have:
Nope, that is fine. (Apart from maybe doing with *pcv and sticking that into
the ctor directly). Someone somewhere needs to fill the vector; we don't
have a function for it so you had to fill this in.
| // [[Rcpp::export]]
| void listMat(Rcpp::List mat_list) {
| int n_mats = mat_list.size();
| std::vector<Eigen::MatrixXf> vec_of_mats(n_mats);
|
| for (int i=0; i < n_mats; i++) {
| Rcpp::NumericMatrix tmpcv = mat_list[i];
| double *pcv = &tmpcv(0,0);
|
| Eigen::Map<Eigen::MatrixXd> tmpmapd(pcv, tmpcv.nrow(), tmpcv.ncol());
| vec_of_mats[i] = Eigen::MatrixXf(tmpmapd.cast<float>());
| }
| std::cout << vec_of_mats[0] << std::endl; // Sanity check.
| return;
| }
|
| Note that I'm putting each matrix in my R list into a std::vector
| where each element is a float matrix (ie MatrixXf). This does assume
| that Rcpp::NumericMatrix stores the matrix data contiguously and in
| column-major order, which is true, but will it always necessarily be
| so? (I get a little bit nervous about reaching into a class like this
No need to be nervous as we get the matrix from R which (presumably) won't
change these internals anytime soo.
| and just pulling out an address). Is there a more direct way of doing
| this?
It looks fine to me. I'd write very similar code.
Dirk
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list