[Tutor] improving speed using and recalling C functions

Gabriele Brambilla gb.gabrielebrambilla at gmail.com
Fri Apr 11 02:03:16 CEST 2014


sure.


def mymain():

        def LEstep(n):

                Emin=10**6

                Emax=5*(10**10)

                Lemin=log10(Emin)

                Lemax=log10(Emax)

                stepE=(Lemax-Lemin)/n

                return (stepE, n, Lemin, Lemax)


        if __name__ == "__main__":

                import sys

                if len(sys.argv)<=1:

                        stepENE, nex, Lemin, Lemax = LEstep(200)

                elif len(sys.argv)<=2:

                        stepENE, nex, Lemin, Lemax =
LEstep(int(sys.argv[1]))

                else:

                        stepENE, nex, Lemin, Lemax =
LEstep(int(sys.argv[1]))

                        freq=float(sys.argv[2])


        eel = list(range(nex))

        eels = np.logspace(Lemin, Lemax, num=nex, endpoint=False)


        indpha = list(range(npha))

        indobs = list(range(nobs))


        rlc = c/(2*pi*freq)


        MYMAP1 = np.zeros([npha, nobs, nex], dtype=float)

        MYMAP2 = np.zeros([npha, nobs, nex], dtype=float)

        MYMAP3 = np.zeros([npha, nobs, nex], dtype=float)

        MYMAP4 = np.zeros([npha, nobs, nex], dtype=float)

        MYMAP5 = np.zeros([npha, nobs, nex], dtype=float)

        count=0

        omegacliston = []


        alpha = '60_'

        for my_line in open('datasm0_60_5s.dat'):

                myinternet = []

                gmlis = []

                print('reading the line', count, '/599378')

                my_parts = [float(i) for i in my_line.split()]

                phase = my_parts[4]

                zobs = my_parts[5]

                rho = my_parts[6]



                gammar1 = my_parts[7]

                gammar2 = my_parts[8]

                gammar3 = my_parts[9]

                gammar4 = my_parts[10]

                gammar5 = my_parts[11]



                gmlis.append(gammar1)

                gmlis.append(gammar2)

                gmlis.append(gammar3)

                gmlis.append(gammar4)

                gmlis.append(gammar5)

                i = int((phase-phamin)/stepPHA)

                j = int((zobs-obamin)/stepOB)

                for gammar in gmlis:


                        omC = (1.5)*(gammar**3)*c/(rho*rlc)

                        gig = omC*hcut/eVtoErg

                        omegacliston.append(omC)

                        for w in eel[:]:

                                omega =
(10**(w*stepENE+Lemin))*eVtoErg/hcut

                                x = omega/omC

                                kap = instruments.kappa(x)

                                Iom = (1.732050808/c)*(e**2)*gammar*kap

                                P = Iom*(c/(rho*rlc))/(2*pi)

                                phps = P/(hcut*omega  )


                                www =  phps/(stepPHA*sin(zobs)*stepOB)

                                myinternet.append(www)



                count = count + 1



                oo = 0



                for k in eel[:]:

                        MYMAP1[i, j, k] = MYMAP1[i, j, k] + myinternet[oo]

                        oo = oo + 1

                for k in eel[:]:

                        MYMAP2[i, j, k] = MYMAP2[i, j, k] + myinternet[oo]

                        oo = oo + 1

                for k in eel[:]:

                        MYMAP3[i, j, k] = MYMAP3[i, j, k] + myinternet[oo]

                        oo = oo + 1

                for k in eel[:]:

                        MYMAP4[i, j, k] = MYMAP4[i, j, k] + myinternet[oo]

                        oo = oo + 1

                for k in eel[:]:

                        MYMAP5[i, j, k] = MYMAP5[i, j, k] + myinternet[oo]

                        oo = oo + 1


        BIGMAPS = [MYMAP1, MYMAP2, MYMAP3, MYMAP4, MYMAP5]

        sigmas = [1, 3, 5, 10, 30]

        fiq1 = plt.figure()

        fiq2 = plt.figure()

        fiq3 = plt.figure()

        fiq4 = plt.figure()

        fiq5 = plt.figure()

        fiqqs = [fiq1, fiq2, fiq3, fiq4, fiq5]


        multis = zip(sigmas, BIGMAPS, fiqqs)


        for sigma, MYMAP, fiq in multis:


 filename=alpha+'_'+str(sigma)+'_'+str(npha)+'_'+str(phamin)+'_'+str(phamax)+'_'+str(nobs)+'_'+str(obamin)+'_'+str(obamax)+'_'+str(nex)+'_'+str(Lemin)+'_'+str(Lemax)+'_.dat'



                MYfile = open(filename, 'a')



                for k in eel[:]:

                        for j in indobs[:]:

                                for i in indpha[:]:

                                        A=MYMAP[i, j, k]


                                        stringa = str(A) + ','

                                        MYfile.write(stringa)

                        accapo = '\n'

                        MYfile.write(accapo)



                MYfile.close()



2014-04-10 19:55 GMT-04:00 Danny Yoo <dyoo at hashcollision.org>:

>
> >    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> >         1  149.479  149.479  199.851  199.851 skymaps5.py:16(mymain)
> >  18101000   28.682    0.000   28.682    0.000 {method 'write' of 'file'
> objects}
> >
> >     33044    5.470    0.000    6.444    0.000
> interpolate.py:394(_call_linear)
> >    230000    2.272    0.000   21.279    0.000 instruments.py:10(kappa)
> >    231328    2.120    0.000    2.120    0.000
> {numpy.core.multiarray.array}
> >     33044    1.719    0.000    3.836    0.000
> interpolate.py:454(_check_bounds)
> >     66088    1.611    0.000    1.611    0.000 {method 'reduce' of
> 'numpy.ufunc'
> > objects}
> >     33044    1.146    0.000   11.623    0.000
> interpolate.py:443(_evaluate)
> >     33044    1.120    0.000    5.542    0.000
> interpolate.py:330(__init__)
> >     33044    0.659    0.000    2.329    0.000 polyint.py:82(_set_yi)
> >
> > the major time is required by mymain that is the whole program.
>
> Good!  Profiles like this allow us to pinpoint issues.
>
> Wait... ?!
>
> The profiler is saying that the majority of time is in my main, but _not_
> in auxiliary functions. That's surprising.  Am I misreading the profile?
>
> Can you show what mymain is doing?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140410/1efd6ec5/attachment-0001.html>


More information about the Tutor mailing list