On 2010-06-01 0:16, bill.venab...@csiro.au wrote:
xyzs<- matrix(rnorm(3*100000,0,1),ncol=3)

V<- c(2,3,4)
system.time(vx<- apply(t(xyzs) * V, 2 ,sum))
    user  system elapsed
    1.06    0.02    1.08

system.time(wx<- as.vector(xyzs %*% V))
    user  system elapsed
       0       0       0
all.equal(vx, wx)
[1] TRUE

Or, for a very slight further reduction in time in
the case of larger matrices/vectors:

 as.vector(tcrossprod(V, xyzs))

I mention this merely to remind new users of the
excellent speed of [t]crossprod().

 -Peter Ehlers


?

-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf Of Remko Duursma
Sent: Tuesday, 1 June 2010 4:04 PM
To: r-help@r-project.org
Subject: [R] Faster matrix operation?

Dear R-helpers,

I have a three-column matrix with lots of rows:

xyzs<- matrix(rnorm(3*100000,0,1),ncol=3)

# And I am multiplying it with some vector V, and summing the rows
(columns after t()) in this way:
V<- c(2,3,4)
system.time(vx<- apply(t(xyzs) * V, 2 ,sum))


Ok, this does not take long (0.9 sec on my machine), but I have to do
this lots of times, with frequently larger matrices.

Is there a way to significantly speed this up, apart from writing it
in Fortran or C and calling it from within R (which is what I am
planning unless there is an alternative)?


thanks,
Remko



______________________________________________
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