[R] Speeding indexing and sub-sectioning of 3d array
    Swidan, Firas 
    swidanf at janelia.hhmi.org
       
    Wed Aug  9 16:36:49 CEST 2006
    
    
  
Hi,
I am having a problem with a very slow indexing and sub-sectioning of a 3d
array:
> dim(arr)
[1] 245 175 150
For each point in the array, I am trying to calculate the mean of the values
in its surrounding:
mean( arr[ (i - radius):(i + radius),
                                (j - radius):(j + radius),
                                (k - radius):(k + radius)] )
Putting that code in 3 for loops
calculateKMedian <- function( arr, radius){
  for( i in (radius + 1):(dim(arr)[1] - radius - 1) ){
    for( j in (radius + 1):(dim(arr)[2] - radius - 1) )
      for( k in (radius + 1):(dim(arr)[3] - radius - 1) ){
        mediansArr <- mean( arr[ (i - radius):(i + radius),
                                (j - radius):(j + radius),
                                (k - radius):(k + radius)] )
      }
  }
  return(mediansArr)
}
Results in a very slow run:
> system.time( calculateKMedian( a, 3))
[1] 423.468   0.096 423.631   0.000   0.000
If I replace 
        mediansArr <- mean( arr[ (i - radius):(i + radius),
                                (j - radius):(j + radius),
                                (k - radius):(k + radius)] )
With an access to the (I,j,k) cell's value
 mediansArr <- arr[i,j,k]
The running time decreases to
> system.time( calculateKMedian( a, 3))
[1] 14.821  0.005 14.829  0.000  0.000
But 14 seconds are still pretty expensive for just scanning the array.
Is there anything I can do to speed the indexing and the sub-sectioning of
the 3d array in this case?
Thanks for the help,
Firas.
    
    
More information about the R-help
mailing list