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
                                         spec...@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@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.


______________________________________________
R-help@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.

Reply via email to