[R] Speed up sum of outer products?

Phil Spector spector at stat.berkeley.edu
Tue Mar 1 18:30:43 CET 2011


What you're doing is breaking up the calculation of X'X 
into n steps.   I'm not sure what you mean by "very slow":

> X = matrix(rnorm(1000*50),1000,50)
> n = 1000
> system.time({C=matrix(0,50,50);for(i in 1:n)C = C + (X[i,] %o% X[i,])})
    user  system elapsed
   0.096   0.008   0.104

Of course, you could just do the calculation directly:

> system.time({C1 = t(X) %*% X})
    user  system elapsed
   0.008   0.000   0.007 
> all.equal(C,C1)
[1] TRUE


 					- Phil Spector
 					 Statistical Computing Facility
 					 Department of Statistics
 					 UC Berkeley
 					 spector at stat.berkeley.edu



On Tue, 1 Mar 2011, AjayT wrote:

> Hi, I'm new to R and stats, and I'm trying to speed up the following sum,
>
> for (i in 1:n){
> 	C = C + (X[i,] %o% X[i,])   # the sum of outer products - this is very slow
> according to Rprof()
> }
>
> where X is a data matrix (nrows=1000 X ncols=50), and n=1000. The sum has to
> be calculated over 10,000 times for different X.
>
> I think it is similar to estimating a co-variance matrix for demeaned data
> X. I tried using cov, but got different answers, and it was'nt much quicker?
>
> Any help gratefully appreciated,
>
> -- 
> View this message in context: http://r.789695.n4.nabble.com/Speed-up-sum-of-outer-products-tp3330160p3330160.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list