[Rcpp-devel] Easy way to subset a matrix
Jared Murray
jmurray.1022 at gmail.com
Thu Sep 22 05:42:03 CEST 2011
In a related vein, is there any functionality - existant or planned -
for "fancy" indexing (that is, selecting non-continguous submatrices)
a la
X = matrix(1:24, nrow=3)
Y = X[,c(2,4,7)]
As it stands I'd create a new matrix and loop over the column indices
to populate it. Not a big deal since my matrices aren't huge, but a
touch inconvenient & I'm curious if there's a better alternative.
Best,
Jared
On Wed, Sep 21, 2011 at 8:35 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> 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
> _______________________________________________
> 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
>
More information about the Rcpp-devel
mailing list