[R] fill Matrix quicker

Patrick Burns pburns at pburns.seanet.com
Mon Aug 1 20:48:56 CEST 2011


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:
> 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.
>
> ______________________________________________
> 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.
>

-- 
Patrick Burns
pburns at pburns.seanet.com
twitter: @portfolioprobe
http://www.portfolioprobe.com/blog
http://www.burns-stat.com
(home of 'Some hints for the R beginner'
and 'The R Inferno')



More information about the R-help mailing list