From edd at debian.org  Sun Feb 20 17:11:21 2011
From: edd at debian.org (Dirk Eddelbuettel)
Date: Sun, 20 Feb 2011 10:11:21 -0600
Subject: [Rd] Problem using F77_CALL(dgemm) in a package
In-Reply-To: <19809.14419.760969.854831@max.nulle.part>
References: <AANLkTimAHcu_=_rMR9bFVYK86bmWhs8Pimgv3L-LiHsV@mail.gmail.com>
	<19809.14419.760969.854831@max.nulle.part>
Message-ID: <19809.15657.103744.21821@max.nulle.part>


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



[Rd] Problem using F77_CALL(dgemm) in a package
Dirk Eddelbuettel