Skip to content
Back to formatted view

Raw Message

Message-ID: <49A88A2D.6010102@stats.uwo.ca>
Date: 2009-02-28T00:49:49Z
From: Duncan Murdoch
Subject: Large 3d array manipulation
In-Reply-To: <2018A7D503F84748AECB8E75D4284117014E92D9@uspalex04.epri.com>

On 27/02/2009 6:15 PM, Vemuri, Aparna wrote:
> I have a large 3 dimensional array of size (243,246,768)
>  The first dimension is Rows, second is columns and the third is Time. 
> 
> So for each row and column, I want to calculate the mean of time steps
> 1:8, 2:9, 3:10 and so on and assign the values to a new array. For this
> I am using the following script.
> 
> for(i in 1:243)
> {
> for(j in 1:246)
> {
> for(k in 1:768)
> {
> newVar[i,j,k] <- mean( myVar[i,j,k:k+7])
> }
> }
> }
> 
> This works, but needless to mention it take a very long time to loop
> over all the rows, columns and time periods. I was wondering if there is
> a simpler way to do this.

Yes, vectorize it.  I think this would work:

newVar <- array(NA, c(243, 246, 768))

for (k in 1:768)
   newVar[,,k] <- apply(myVar, 1:2, function(x) mean(x[k:(k+7)]))

but of course I haven't tried it.

Duncan Murdoch