Array neighbourhoods
Daniel Pryde
ababo_2002 at hotmail.com
Sun Jan 4 11:42:09 EST 2004
Thanks a lot for the advice. I'll give it a try. :)
Daniel
>"Daniel Pryde" <ababo_2002 at hotmail.com> wrote in message
>news:mailman.42.1072799018.8134.python-list at python.org...
> > Hi again.
> >
> > One thing I forgot to include in my post the other day. I was wondering
>if
> > anyone knew of any fast algorithms for returning the surrounding
>neighbours
> > of an array element, or even the neighbours of a group of array
>elements.
> >
>Try this (requires Python 2.3, since it uses sets). Can't say how fast it
>is, but it handles all cases I can think of (edge effects, disjoint cells,
>etc.). Maybe start with this to get going, then make it faster if it needs
>to be.
>
>
># matrixNeighbors.py
>from sets import Set
>
>def neighborhoodOf(cells, rows, cols):
> ret = Set()
> if type(cells) == tuple:
> row,col = cells
> for i in (-1,0,1):
> for j in (-1,0,1):
> ret.add( (row+i, col+j) )
> # remove original cell
> ret.remove( cells )
>
> elif type(cells) == list:
> for cell in cells:
> for neighbor in neighborhoodOf(cell,rows,cols):
> ret.add(neighbor)
> # remove original cells
> ret -= Set( cells )
>
> # remove all entries in ret with negative values,
> # or values greater than number of cols/rows
> for x,y in ret.copy():
> if x < 0 or y < 0 or x >= COLS or y >= ROWS:
> ret.remove( (x,y) )
>
> return list(ret)
>
># define matrix boundaries
>ROWS = 4
>COLS = 6
>
>print neighborhoodOf( (0,0), ROWS, COLS )
>print neighborhoodOf( (COLS-1,ROWS-1), ROWS, COLS )
>print neighborhoodOf( (COLS,ROWS), ROWS, COLS )
>print neighborhoodOf( [(0,0),(0,1)], ROWS, COLS )
>print neighborhoodOf( neighborhoodOf( (1,1), ROWS, COLS), ROWS, COLS )
>print neighborhoodOf( neighborhoodOf( (COLS-1,ROWS-1), ROWS, COLS), ROWS,
>COLS )
>print neighborhoodOf( neighborhoodOf( (COLS,ROWS), ROWS, COLS), ROWS, COLS
>)
>
>
>
_________________________________________________________________
Tired of 56k? Get a FREE BT Broadband connection
http://www.msn.co.uk/specials/btbroadband
More information about the Python-list
mailing list