[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