Scipy's ndimage module has a function that takes a generic callback  
and calls it with the values of each neighborhood (of a given size,  
and optionally with a particular "mask" footprint) centered on each  
array element. That function handles boundary conditions, etc nicely.

Unfortunately, I'm not sure if it works with masked arrays, and I  
think it hands a ravel'd set of pixels back to the callback function.  
You could probably hack masking in there by passing it the mask  
concatenated to the array, and then deal with the mask explicitly.

Zach


On Feb 23, 2007, at 11:39 AM, Bryan Cole wrote:

> On Fri, 2007-02-23 at 17:38 +0100, [EMAIL PROTECTED] wrote:
>> Hi,
>>
>> Given a (possibly masked) 2d array x, is there a fast(er) way in  
>> Numpy to obtain
>> the same result as the following few lines?
>>
>> d = 1                                  # neighbourhood 'radius'
>> Nrow = x.shape[0]
>> Ncol = x.shape[1]
>> y = array([[x[i-d:i+d+1,j-d:j+d+1].ravel() for j in range(d,Ncol- 
>> d)]      \
>>                                            for i in range(d,Nrow-d)])
>>
>
> how about something like
>
> er = Nrow - d
> ec = Ncol - d
> y = array([x[i:er+i, j:ec+j] for j in arange(-d,d)
>                               for i in arange(-d,d)])
>
> now you're looping over a small array and combining slices of the big
> array (as opposed to looping over the big array and combining slices
> from a small one). This should be faster for large Nrow, Ncol.
>
> BC
>
>
>> What you get is an array containing all the elements in a  
>> neighbourhood for each
>> element, disregarding the edges to avoid out-of-range problems.  
>> The code above
>> becomes quite slow for e.g. a 2000x2000 array. Does anyone know a  
>> better
>> approach?
>>
>> Ciao,
>> Joris
>>
>>
>>
>> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
>
>
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion

_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to