[Rd] Problem using F77_CALL(dgemm) in a package
Jason Rudy
jcrudy at gmail.com
Sun Feb 20 23:39:00 CET 2011
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?
-Jason
On Sun, Feb 20, 2011 at 8:11 AM, Dirk Eddelbuettel <edd at 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 | edd at debian.org | http://dirk.eddelbuettel.com
>
More information about the R-devel
mailing list