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}}


