[Rcpp-devel] Easy way to subset a matrix

Dirk Eddelbuettel edd at debian.org
Wed Sep 21 14:35:05 CEST 2011


On 20 September 2011 at 23:00, Noah Silverman wrote:
| Nice suggestion, but it may not work for what I'm trying to do.
| 
| I'm building up a matrix of values over a time series as part of a big loop.
|  At certain iterations, I need to calculate some summary statistics on a few
| things.  In R, it is trivial to subset any part of a matrix.  Not sure to do
| that in Rcpp.

RcppArmardillo makes Armadillo and Rcpp (and hence R) interoperable.  

Which means Zarrar has just solved your problem for you. I don't quite see
where that 'may not work' as you claim.  Care to expand?

You also may want to look at things like the Rcpp::SubMatrix class. Here is a
quick cut and paste from one of the unit test:

       NumericMatrix xx(4, 5);
       xx(0,0) = 3;
       xx(0,1) = 4;
       xx(0,2) = 5;
       xx(1,_) = xx(0,_);
       xx(_,3) = xx(_,2);
       SubMatrix<REALSXP> yy = xx( Range(0,2), Range(0,3) ) ;
       NumericMatrix res = yy ;
       return res;

Supply a matrix and two ranges, get back a submatrix.  So it's there.  Also
note the sugar syntax used here accessing entire rows and colums, just like
in R.

Dirk

| 
| 
| --
| Noah Silverman
| UCLA Department of Statistics
| 8117 Math Sciences Building
| Los Angeles, CA 90095
| 
| On Sep 20, 2011, at 10:09 PM, Zarrar Shehzad wrote:
| 
| 
|     I am not sure if there are native functions in Rcpp but you could use
|     RcppArmadillo to solve your problem.
| 
|     So say Xs = x:
| 
|     // Convert from SEXP => Rcpp => Arma
|     Rcpp::NumericMatrix Xr(Xs);
|     arma::mat X(Xr.begin(), Xr.nrow(), Xr.ncol(), false);
| 
|     // Get subset of matrix and calculate variance
|     // (i.e., do var(x[3:10,5]))
|     arma::var( X.submat(3, 10, 5, 5) );
| 
|     The armadillo docs are really nice so you can see those for more info on
|     the var and submat functions.
| 
|     Cheers
|     Zarrar
| 
|     On Wed, Sep 21, 2011 at 12:16 AM, Noah Silverman <noahsilverman at ucla.edu>
|     wrote:
| 
|         Hello,
| 
|         I want to calculate the variance of a subset of a matrix column.
| 
|         For example, if I wanted the variance of items 3-10 in column 5.
| 
|         In R, this would be:
| 
|         x <- matrix(rnorm(100), nrow=10, ncol=10)
|         varx <- var(x[3:10,5])
| 
|         In Rcpp, I can construct a matrix object Rcpp::NumericMatrix x
|         The var function is available thanks to the great Sugar implementation
| 
|         But, how can I easily reference a subset of a column to calculate the
|         variance?
| 
|         Ideas?
| 
| 
|         --
|         Noah Silverman
|         UCLA Department of Statistics
|         8117 Math Sciences Building #8208
|         Los Angeles, CA 90095
|        
| 
|         _______________________________________________
|         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
| 
| 
| 
| 
| 
| ----------------------------------------------------------------------
| _______________________________________________
| 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
-- 
New Rcpp master class for R and C++ integration is scheduled for 
San Francisco (Oct 8), more details / reg.info available at
http://www.revolutionanalytics.com/products/training/public/rcpp-master-class.php


More information about the Rcpp-devel mailing list