[Rcpp-devel] Sparse matrices with RcppArmadillo
Armadillo sparse matrices are stored in Compressed Sparse Column format: http://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29 This layout is used by a majority of external solvers. It would be far more efficient to take this layout into account when copying matrices, instead of blindly (and slowly) copying element by element. On Sunday, December 9, 2012, Romain Francois <romain at r-enthusiasts.com> wrote:
Le 08/12/12 09:45, S?ren H?jsgaard a ?crit :
Dear all, I want to use a matrix (of type "dgCMatrix" from the Matrix package) in
RcppArmadillo, so I do:
library(inline) src <- ' using namespace arma; using namespace Rcpp; SpMat<double> X = as<SpMat<double> >(XX_); ' foo <- cxxfunction(signature(XX_=""), body=src, plugin="RcppArmadillo") - but this fails. It seems to me (browsing the web) that SpMat are
supported, but I might be wrong here. I have no indication that dgCMatrix matrices can be "converted" to SpMat's. I know that I can work with dgCMatrix matrices with RcppEigen, but what I need is to extract submatrices and that is very easy to do with RcppArmadillo.
Any thoughts? Thanks in advance. Regards S?ren
Doug might know better about the internals of Matrix types. This is just
following the recipee from how these are handled in RcppEigen:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp ;
// [[Rcpp::export]]
void convert(S4 mat){
IntegerVector dims = mat.slot( "Dim" ) ;
IntegerVector i = mat.slot( "i" ) ;
IntegerVector p = mat.slot( "p" ) ;
NumericVector x = mat.slot( "x" ) ;
int nrow = dims[0], ncol = dims[1] ;
arma::sp_mat res( nrow, ncol) ;
for(int j = 0; j < ncol; ++j) {
for (int k = p[j]; k < p[j + 1]; ++k) res( i[k], j ) = x[k];
}
std::cout << res << std::endl ;
}
/*** R
require(Matrix)
i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
( A <- sparseMatrix(i, j, x = x) )
convert(A)
***/
I don't think there is a better way to fill multiple values ina SpMat,
maybe Conrad has insights.
Romain -- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 R Graph Gallery: http://gallery.r-enthusiasts.com blog: http://romainfrancois.blog.free.fr |- http://bit.ly/RE6sYH : OOP with Rcpp modules `- http://bit.ly/Thw7IK : Rcpp modules more flexible
_______________________________________________ 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
-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20121209/1101076b/attachment.html>