From: tismer at appliedbiometrics.com (Christian Tismer)
Date: Mon, 10 May 1999 17:03:40 GMT
Subject: my loop is too slow
References: <Pine.SGI.3.91.990510155017.9052A-100000@dft> <lzCZ2.30$G3.3029@news14.ispnews.com>
Message-ID: <3737116C.B24D3F83@appliedbiometrics.com>
Content-Length: 1768
X-UID: 1985                                                 


Tim Hochberg wrote:
> 
> SC Zhong wrote in message ...
> >
> >I tried to learn and use python a week ago, and wrote
> >a small application.  When it run the loop:
> >
> > for k in range(dimension):
> > for i in range(dimension):
> > for j in range(dimension):
> > for h in range(dimension):
> > a[k,i]=a[k,i]+c[k,h]*c[k,j]*\
> > f[j,i]*f[i,h]
> 
> Are you using Numeric Python? The array notation ([x,y]) would indicate that
> you are either using Numeric or your are using dictionaries to represent
> arrays. If you are doing the second, it is likely to be quite slow.
> 
> If you are using or can use Numeric, something like the following (untested)
> code should speed things up significantly.
> 
> from Numeric import *
> dimRange = range(dimension)
> # Make sure a is an array.
> a = asarray(a)
> for j in dimRange:
>     for h in dimRange:
>         a = a + (c[:,h]*c[:,j])[:,NewAxis] * (f[j,:]*f[:,h])[NewAxis,:]


def hochberg(a, c, f, dim_range):
    from Numeric import *
    # Make sure a is an array.
    a, c, f = map(asarray, (a, c, f))
    for j in dim_range:
        for h in dim_range:
            a = a + (c[:,h]*c[:,j])[:,NewAxis] *
(f[j,:]*f[:,h])[NewAxis,:]

worked 17 times faster than the iterative complex version, tested
with n=30.
And with n=142, it ran in 444 seconds on a P233 machine.

ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer at appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaiserin-Augusta-Allee 101   :    *Starship* http://starship.python.net
10553 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     we're tired of banana software - shipped green, ripens at home




