Skip to content

fill Matrix quicker

5 messages · monk, Jean V Adams, Patrick Burns +1 more

#
dear all,

i have a quite simple question, i want to fill up a Matrix like done in the
following function,
but the performance is very bad for large dimensions
is there a way to do this like with apply or something similar?


makeMatrix <- function(a, b,dim) {
	X=matrix(0,ncol=dim,nrow=dim)



	for (i in c(1:dim)){
		for (j in c(1:dim)) {
		if (i==j) {X[i,j]<-a}
		else { X[i,j]<-  exp(( -1*abs(i-j))/(3*b)) }
		}
	}
	X
}

--
View this message in context: http://r.789695.n4.nabble.com/fill-Matrix-quicker-tp3710428p3710428.html
Sent from the R help mailing list archive at Nabble.com.
#
Most certainly you can speed it up:

  X <- exp(-abs(row(X) - col(X)) / (3*b))
  diag(X) <- a

should do what you want.  This is called
'vectorization' and is discussed lots of
places -- for instance, in the two documents
mentioned below in my signature.
On 01/08/2011 19:12, monk wrote:

  
    
#
On Aug 1, 2011, at 20:12 , monk wrote:

            
I'd go for something like 

X <- outer(1:dim, 1:dim, function(i,j) exp(-abs(i-j)/3/b))
diag(X) <- a