[Rcpp-devel] Returning a matrix from RcppEigen
Michael Hannon
jmhannon.ucdavis at gmail.com
Fri Jun 27 20:31:55 CEST 2014
Thanks, Dirk. Last night I woke up with a cramp in my leg and the
inspiration that the problem was in the R test code, not in the call
to Eigen. I was absent-mindedly creating integer matrices in my test
code. After I changed to:
amat <- matrix(as.numeric(1:9), nrow=3)
etc., the Eigen stuff worked just fine. Sorry for the noise.
-- Mike
On Fri, Jun 27, 2014 at 2:38 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 26 June 2014 at 16:01, Michael Hannon wrote:
> | Greetings. I've been trying to get familiar with RcppArmadillo and RcppEigen.
> | As my "Hello, world!" example I'm using matrix multiplication. I got the
> | Armadillo version to work, but I'm having trouble with the Eigen version.
> |
> | I'm trying to mimic one of Dirk's gallery snippets:
> |
> | http://gallery.rcpp.org/articles/eigen-eigenvalues/
> |
> | I've appended the details. My problem is that I evidently don't know what to
> | return from the function. I've tried various alternatives, but the only one
> | that compiles is:
> |
> | return C; // C = A * B
> |
> | This compiles but produces the error message:
> |
> | > mat_mul_eigen(amat, bmat)
> | Error in eval(expr, envir, enclos) (from srcConn#6) :
> | Wrong R type for mapped vector
> |
> | I must be overlooking something obvious. Suggestions welcome. Thanks.
>
> I am out at a conference and can't look in detail but I would invite you to
> check the other examples in the package itself: The unit tests are one
> source, the examples and FastLm are another and then there are the other
> packages using RcppEigen as well as other Rcpp Gallery posts. This should be
> fixable pretty easily.
>
> Dirk
>
>
> | -- Mike
> |
> | (File is: mat_mul_eigen.cpp. Executed in R via:
> | sourceCpp("./mat_mul_eigen.cpp")
> | )
> |
> |
> | #include <RcppEigen.h>
> |
> | // [[Rcpp::depends(RcppEigen)]]
> |
> | using Eigen::Map; // 'maps' rather than copies
> | using Eigen::MatrixXd; // variable size matrix,
> | double precision
> | using Eigen::VectorXd; // variable size vector,
> | double precision
> |
> | // [[Rcpp::export]]
> |
> | MatrixXd mat_mul_eigen(Map<MatrixXd> A_,
> | Map<MatrixXd> B_) {
> |
> | MatrixXd C(A_ * B_);
> |
> | return C;
> | }
> |
> |
> | /*** R
> |
> | library(microbenchmark)
> | amat <- matrix(1:9, nrow=3)
> | bmat <- matrix(10:18, nrow=3)
> |
> | mat_mul_eigen(amat, bmat)
> |
> | amat %*% bmat
> |
> | microbenchmark(
> | amat %*% bmat,
> | mat_mul_eigen(amat, bmat)
> | )
> |
> | */
> | _______________________________________________
> | 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
>
> --
> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the Rcpp-devel
mailing list