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.