Performance Issues please help

Peter Otten __peter__ at web.de
Thu Jun 2 08:25:50 CEST 2005


PyPK wrote:

> I was testing this piece of code and it takes about 24-30 seconds to do
> a look up on a list(m) of size 1000x1000
> m -> list of size 1000x1000
> import time
> print time.ctime()
> box = {}
> for r,row in enumerate(m):
>     for c,e in enumerate(row):
>          if box.has_key(e):
>                params = box[e]
>                box[e] = ( min(c, params[0]), min(r, params[1]),
>                           max(c, params[2]), max(r, params[3] ) )
>           else:
>                 box[e] = [c, r, c, r]
> print time.ctime()
> 
> Can some one tell me what exactly is taking more time here. Is it
> because I am using dictionaries or what is the problem. Can some one
> help me improve this .Is there a better way to write this.

AFAICT the row index 'r' can only grow. Therefore one min() and one max()
should be superfluous (untested):

def make_box(m):
    box = {}
    for r, row in enumerate(m):
        for c, e in enumerate(row):
            if e in box:
                left, top, right, bottom  = box[e]
                box[e] = (min(c, left), top, max(c, right), r)
            else:
                box[e] = (c, r, c, r)
    return box

Peter



More information about the Python-list mailing list