# [R] fast cumulative matrix multiplication

David Winsemius dwinsemius at comcast.net
Fri Oct 30 00:10:02 CET 2009

```This morning I did 10,000 replicates of multiplying 3 small matrices
using a for-loop andalso with Reduce and found that the for-loop was
roughly twice as fast, so I didn't post.

> m1 <- matrix(1:9, 3)
> m2 <- matrix(1:9, 3)
> m3 <- matrix(1:9, 3)
> system.time(replicate(1000, Reduce("%*%" , list(m1,m2,m3) ) ) )
user  system elapsed
0.046   0.001   0.053
> mlist <- list(m1,m2,m3)
> m0 <- diag(1, nrow=3,ncol=3)
> system.time(replicate(1000, for (i in seq_along(mlist) ) {m0 <- m0
%*% mlist[[i]] } ) )
user  system elapsed
0.025   0.001   0.033

--
David

On Oct 29, 2009, at 6:54 PM, Gabor Grothendieck wrote:

> Don't know if its any faster but try this:
>
>  Reduce("%*%", list(M1, M2, M3), accumulate = TRUE)
>
>
> On Thu, Oct 29, 2009 at 9:56 AM, Todd Schneider
> <todd.w.schneider at gmail.com> wrote:
>> Hi all,
>>
>> I am looking for a function like cumprod() that works for matrix
>> multiplication.
>>
>> In other words, I have matrices [M1, M2, ..., Mn], and I want to
>> calculate
>> [M1, M1%*%M2, M1%*%M2%*%M3, ..., M1%*%...%*%Mn] as quickly as
>> possible.
>> Right now I'm using a for() loop but it seems like there should be
>> a faster
>> way.
>>
>> Any help is appreciated!
>>
>> Thanks,
>>
>> Todd Schneider
>> todd.w.schneider at gmail.com
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help