Thanks for the tip. That API could make my work considerably easier. Jason
On Tue, Feb 22, 2011 at 7:37 AM, Douglas Bates <ba...@stat.wisc.edu> wrote: > On Sun, Feb 20, 2011 at 4:39 PM, Jason Rudy <jcr...@gmail.com> wrote: >> I've never used C++ before, so for this project I think I will stick >> with just using the BLAS and LAPACK routines directly. Another issue >> is that I will need to do some sparse matrix computations, for which I >> am planning to use CSPARSE, at least to begin with. I am interested >> by RcppArmadillo, and would consider it for future projects. If you >> don't mind, what in your opinion are the major pros and cons of an >> RcppArmadillo solution compared to simply using the BLAS or LAPACK >> routines through the .C interface? > > You may want to consider the API exported by the Matrix package that > allows access to CHOLMOD functions in that package's library. The > entire CSPARSE library is also included in the Matrix package but most > of it is not exported because the CHOLMOD functions are generally more > effective. (Both CHOLMOD and CSPARSE are written by Tim Davis. > CSPARSE is good code but it was written more for instructional purpose > than as an "industrial strength" package.) > >> On Sun, Feb 20, 2011 at 8:11 AM, Dirk Eddelbuettel <e...@debian.org> wrote: >>> >>> On 20 February 2011 at 09:50, Dirk Eddelbuettel wrote: >>> | There is of course merit in working through the barebones API but in case >>> you >>> | would consider a higher-level alternative, consider these few lines based >>> on >>> | RcppArmadillo (which end up calling dgemm() for you via R's linkage to >>> the BLAS) >>> >>> PS I always forget that we have direct support in Rcpp::as<> for Armadillo >>> matrices. The examples reduces to three lines in C++, and you never need to >>> worry about row or column dimension, or memory allocation or deallocation: >>> >>> R> suppressMessages(library(inline)) >>> R> txt <- ' >>> + arma::mat Am = Rcpp::as< arma::mat >(A); >>> + arma::mat Bm = Rcpp::as< arma::mat >(B); >>> + return Rcpp::wrap( Am * Bm ); >>> + ' >>> R> mmult <- cxxfunction(signature(A="numeric", B="numeric"), >>> + body=txt, >>> + plugin="RcppArmadillo") >>> R> A <- matrix(1:9, 3, 3) >>> R> B <- matrix(9:1, 3, 3) >>> R> C <- mmult(A, B) >>> R> print(C) >>> [,1] [,2] [,3] >>> [1,] 90 54 18 >>> [2,] 114 69 24 >>> [3,] 138 84 30 >>> R> >>> >>> Matrices A and B from directly initialise Armadillo matrices, and the result >>> can be returned directly. >>> >>> Hth, Dirk >>> >>> -- >>> Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com >>> >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel