[Tutor] improving speed using and recalling C functions

Gabriele Brambilla gb.gabrielebrambilla at gmail.com
Fri Apr 11 16:18:23 CEST 2014


ok
modifying the for in this way (zipping an array of matrix drive it crazy)
it works

dko=0

                for gammar in gmils:


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

                        gig = omC*hcut/eVtoErg


                #check the single emission



                        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
#jackson dI/domega

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

                                phps = P/(hcut*omega) #photons per second

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

                                MYMAPS[dko][i,j,w] += www

                        dko += 1



                count = count + 1

Now I will tell you how  much it takes.

Thanks

Gabriele



2014-04-11 10:05 GMT-04:00 Gabriele Brambilla <
gb.gabrielebrambilla at gmail.com>:

> ok, it seems that the code don't enter in this for loop
>
> for gammar, MYMAP in zip(gmlis, MYMAPS):
>
> I don't understand why.
>
> Thanks
>
> Gabriele
>
>
> 2014-04-11 9:56 GMT-04:00 Gabriele Brambilla <
> gb.gabrielebrambilla at gmail.com>:
>
> Hi, I'm sorry but there is a big problem.
>> the code is producing empty file.dat.
>>
>> I think it's because of this that previously I have done that strange
>> trick of myinternet...
>>
>> So:
>>
>> for my_line in open('data.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]
>>
>>
>>
>>                 gmils=[my_parts[7], my_parts[8], my_parts[9],
>> my_parts[10], my_parts[11]]
>>
>>
>>
>>                 i = int((phase-phamin)/stepPHA)
>>
>>                 j = int((zobs-obamin)/stepOB)
>>
>>
>>
>>                 for gammar, MYMAP in zip(gmlis, MYMAPS):
>>
>>
>>
>>                         omC = (1.5)*(gammar**3)*c/(rho*rlc)
>>
>>                         gig = omC*hcut/eVtoErg
>>
>>                 #check the single emission
>>
>>
>>
>>                         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
>> #jackson dI/domega
>>
>>                                 P = Iom*(c/(rho*rlc))/(2*pi) #jackson P
>>
>>                                 phps = P/(hcut*omega) #photons per second
>>
>>                                 www =  phps/(stepPHA*sin(zobs)*stepOB)
>>
>>                                 MYMAP[i,j,w] += www
>>
>>
>>
>>                 count = count + 1
>>
>> when I exit here the MYMAP matrix has all the cells = 0.
>>
>> Now I will try to fiugre it out why.
>>
>> Thanks
>>
>> Gabriele
>>
>>
>>
>> 2014-04-11 9:20 GMT-04:00 Gabriele Brambilla <
>> gb.gabrielebrambilla at gmail.com>:
>>
>> Hi Danny,
>>> I'm quiet impressed.
>>> the program takes near 30 minutes instead of more than 8 hours!
>>>
>>> this is the profile:
>>> Fri Apr 11 09:14:04 2014    restats
>>>
>>>          19532732 function calls in 2105.024 seconds
>>>
>>>    Ordered by: internal time
>>>
>>>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>>>         1 2087.606 2087.606 2105.006 2105.006 skymapsI.py:44(mymain)
>>>  18101000   12.757    0.000   12.757    0.000 {method 'write' of 'file'
>>> objects}
>>>
>>>    715853    3.473    0.000    3.473    0.000 {method 'split' of 'str'
>>> objects}
>>>    715854    1.162    0.000    1.162    0.000 {zip}
>>>         1    0.018    0.018 2105.024 2105.024 <string>:1(<module>)
>>>         6    0.006    0.001    0.006    0.001 {open}
>>>         5    0.002    0.000    0.002    0.000 {method 'close' of 'file'
>>> objects}
>>>
>>>         1    0.000    0.000    0.000    0.000
>>> function_base.py:8(linspace)
>>>         5    0.000    0.000    0.000    0.000
>>> {numpy.core.multiarray.zeros}
>>>         1    0.000    0.000    0.000    0.000
>>> function_base.py:93(logspace)
>>>         1    0.000    0.000    0.000    0.000
>>> {numpy.core.multiarray.arange}
>>>         3    0.000    0.000    0.000    0.000 {range}
>>>         1    0.000    0.000    0.000    0.000 {method 'disable' of
>>> '_lsprof.Prof
>>> iler' objects}
>>>
>>> I hope to have similar problems in the future to learn better how to do
>>> with them!
>>> but in the profile I don't see any operation regarding reading the file
>>> or the mathematical operations...are them hidden in mymain()?
>>>
>>> thanks
>>>
>>> Gabriele
>>>
>>>
>>>
>>>
>>> 2014-04-10 21:38 GMT-04:00 Danny Yoo <dyoo at hashcollision.org>:
>>>
>>> > Comment:  You are looping over your sliced eel five times.  Do you
>>>> >    need to?  I like eel salad a great deal, as well, but, how about:
>>>> >
>>>> >
>>>> >        for k in eel:
>>>> >            MYMAP1[i, j, k] = MYMAP1[i, j, k] + myinternet[oo]
>>>> >            MYMAP2[i, j, k] = MYMAP2[i, j, k] + myinternet[oo]
>>>> >            MYMAP3[i, j, k] = MYMAP3[i, j, k] + myinternet[oo]
>>>> >            MYMAP4[i, j, k] = MYMAP4[i, j, k] + myinternet[oo]
>>>> >            MYMAP5[i, j, k] = MYMAP5[i, j, k] + myinternet[oo]
>>>> >            oo = oo + 1
>>>>
>>>>
>>>> Hi Gabriele,
>>>>
>>>> Also note that, when Martin looked at this part of the code, he
>>>> unfortunately misinterpreted its effect; Martin's proposed rewrite
>>>> here does not preserve the meaning of the original code.  But rather
>>>> than wag my finger at how Martin interpreted the code, I'd rather make
>>>> the observation that this is a warning sign that the original code
>>>> here was not easy to understand.
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140411/e7d5c21a/attachment.html>


More information about the Tutor mailing list