[EMAIL PROTECTED] wrote: > fredrick's solutions seems to be more closer to what I was looking > for.But I am still not sure if that could be done without the use of > Image module.
What do you mean by "closer to what I was looking for"? For the single test case you provided: > say x = [[2,2,0,0,1,1], > [1,1,0,0,1,1], > [1,1,0,0,1,1]] > I basically want to group regions that are non zero like I want to get > the coordinates of non zero regions..as (x1,y1,x2,y2) > [(0,0,2,1),(0,4,2,5)] which show the top left(x1,y1) and bottom > right(x2,y2) corners of each group.hope i am clear. > my solution provides the correct output: >>> x = [[2,2,0,0,1,1], ... [1,1,0,0,1,1], ... [1,1,0,0,1,1]] ... ... >>> getregioncoords(x) [((0, 0), (2, 1)), ((0, 4), (2, 5))] * except that the points aren't flattened. If that's important to you, rewrite getregioncoords as follows: def getregioncoords(grid): """Get top left and bottom right of *rectangular* regions""" regions = getregions(grid) return [reg[0]+reg[-1] for reg in regions if reg.sort() or True] >>> getregioncoords(x) [(0, 0, 2, 1), (0, 4, 2, 5)] >>> > Also in your solution I cannot follow this I broke the solution into two parts: 1) the getregions generator yields a list of all the contiguous regions. The output below is the lists of coordinates that are contiguous non-zero cells in the grid. > [[1, 1, 2, 1, 2, 0], > [2, 0, 0, 2, 0, 1], > [1, 2, 2, 0, 2, 0], > [0, 1, 0, 0, 0, 0], > [2, 0, 0, 1, 1, 0], > [2, 2, 2, 0, 1, 0]] > >>> print "\n".join(str(reg) for reg in getregions(x)) > [(0, 1), (0, 0), (0, 2), (1, 0), (0, 3), (2, 0), (1, 3), (0, 4), (2, > 1), (3, > 1), (2, 2)] > [(5, 4), (4, 4), (4, 3)] > [(5, 0), (5, 1), (4, 0), (5, 2)] > [(1, 5)] > [(2, 4)] 2) If the regions are rectangular, the getregioncoords functions returns the coordinates of the top-left and bottom-right points. You did not answer the previous post which asked what to do if the regions were not rectangular. HTH Michael -- http://mail.python.org/mailman/listinfo/python-list