Re: [R] fill Matrix quicker

2011-08-01 Thread peter dalgaard

On Aug 1, 2011, at 20: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
> }
> 

I'd go for something like 

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


> --
> 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@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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd@cbs.dk  Priv: pda...@gmail.com
"Døden skal tape!" --- Nordahl Grieg

__
R-help@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.


Re: [R] fill Matrix quicker

2011-08-01 Thread monk
thanks a lot , that will do the trick

--
View this message in context: 
http://r.789695.n4.nabble.com/fill-Matrix-quicker-tp3710428p3710533.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@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.


Re: [R] fill Matrix quicker

2011-08-01 Thread Patrick Burns

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@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
pbu...@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')

__
R-help@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.


Re: [R] fill Matrix quicker

2011-08-01 Thread Jean V Adams
Making use of the row() and col() functions speeds things up a bit.

makeMatrix2 <- function(a, b, dim) {
X <- matrix(NA, ncol=dim, nrow=dim)
X <- exp( (-1*abs(row(X) - col(X)))/(3*b) )
diag(X) <- a
X
}

system.time(makeMatrix(1, 2, 1000))
system.time(makeMatrix2(1, 2, 1000))

Jean


`·.,,  ><(((º>   `·.,,  ><(((º>   `·.,,  ><(((º>

Jean V. Adams
Statistician
U.S. Geological Survey
Great Lakes Science Center
223 East Steinfest Road
Antigo, WI 54409  USA




From:
monk 
To:
r-help@r-project.org
Date:
08/01/2011 01:20 PM
Subject:
[R] fill Matrix quicker
Sent by:
r-help-boun...@r-project.org



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@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.



[[alternative HTML version deleted]]

__
R-help@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.