[R] Faster matrix operation?

Peter Ehlers ehlers at ucalgary.ca
Tue Jun 1 11:34:41 CEST 2010


On 2010-06-01 0:16, Bill.Venables at 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-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Remko Duursma
> Sent: Tuesday, 1 June 2010 4:04 PM
> To: r-help at 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
>
>



More information about the R-help mailing list