[R] trade-off between speed and storage in matrix multiplications

Christos Hatzis christos.hatzis at nuverabio.com
Mon Feb 23 19:27:46 CET 2009


You might want to compare the performance of your version to the kronecker
method of Matrix (Matrix package) that has appropriate versions for sparse
matrices etc.

-Christos

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Camarda, 
> Carlo Giovanni
> Sent: Monday, February 23, 2009 1:18 PM
> To: r-help at stat.math.ethz.ch
> Subject: [R] trade-off between speed and storage in matrix 
> multiplications
> 
> Dear R-users,
> 
> 	I coded two equivalent ways to perform (in a simplified 
> version) some matrix multiplications I would like to use in a 
> more general framework.
> In the first case I used Kronecker product and vectorization 
> of a certain matrix. This approach takes less time, but, as 
> you may guess, I run out of memory when dimensions are large.
> In the second approach, I profited of sparseness and 
> structure of the matrices and use outer-functions for 
> performing operations. Here it takes more time, but I have 
> not problem of memory.
> 
> Is there any way to enhance the second approach for 
> speeding-up the whole process? Or, in computing, this is a 
> well-known trade-off between speed and storage-spaces which 
> I'm not aware (sorry for that).
> 
> Please have a look to the example below.
> 
> Needless to say that I'd appreciate any suggestion.
> 
> Best,
> Carlo Giovanni
> 
> 
> # dimensions
> m <- 10
> n <- 15
> # A-matrix
> rnA <- runif(m*m)
> A <- matrix(rnA, m, m)
> # vector
> v <- runif(n)
> # B-matrix
> rnB <- runif(m*n)
> B <- matrix(rnB, m, n)
> 
> # first solution: vectorize B + kronecker product => faster 
> but storage issues system.time( for(i in 1:100){
>     b <- c(B)
>     vKron.A <- kronecker(diag(v), A)
>     SOL1 <- vKron.A %*% b
> })
> 
> # second solution: orig. dims + apply + mapply => slower, but 
> w/o storage issues system.time( for(i in 1:100){
>     Av <- outer(A, v, FUN="*")
>     Av.df1 <- apply(Av, 3, as.data.frame)
>     Av.df2 <- lapply(X=Av.df1, FUN=as.matrix, nrow=m, ncol=m)
>     SOL2 <- mapply(FUN="%*%", Av.df2, as.data.frame(B)) # as a matrix
> })
> 
> 
> 
> 
> 
> ----------
> This mail has been sent through the MPI for Demographic 
> ...{{dropped:10}}
> 
> ______________________________________________
> R-help at 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.
> 
>




More information about the R-help mailing list