[SciPy-User] line_profiler and for-loops !?

Christian Meesters meesters at gmx.de
Tue Mar 16 05:16:27 EDT 2010


Hallo Sebastian,

ich kann nicht direkt auf Deine Frage antworten, weil ich weder Deinen Code noch line_profiler kenne. Aber ich habe ein C++-Modul zur Berechnung einer Abstandsverteilungsfunktion (Berechnung aller euklidischen Distanzen innerhalb einer Punktwolke). Das Modul nutzt keinerlei numpy-header (weil ich es in eine reine C++-App mal einbauen wollte) und ist mit SWIG gewrappt. Es ist rel. schnell: ca. 2x so schnell wie ein (noch mit Pyrex gebautes) Vergleichsmodul. Aber Gael sagte ja, daß Cython schneller sein kann und einfacher zu coden.

Wie auch immer: Wenn Du Interesse hast lasse ich es Dir zukommen.

Sehen wir uns in Paris?

Besten Gruß,
Christian


-------- Original-Nachricht --------
> Datum: Tue, 16 Mar 2010 09:40:14 +0100
> Von: Sebastian Haase <seb.haase at gmail.com>
> An: SciPy Users List <SciPy-user at scipy.org>
> Betreff: [SciPy-User] line_profiler and for-loops !?

> Hi,
> 
> I was starting to use Robert's line_profiler. I seems to work great,
> and I already found one easy way do half my execution time.
> But now it claims that 33% of the time is spent (directly) in the
> "for"-line and another 36% in a very simple "if"-line. See parts of
> the output here:
> <snip>
> Function: doTracing at line 1135
> Total time: 23.9171 s
> 
> Line #      Hits         Time  Per Hit   % Time  Line Contents
> ==============================================================
> <snip>
>   1185                                                       # iterate
> over all tracks, and find close points
>   1186   3853362      8024186      2.1     33.5              for
> tracki,track in enumerate(self.tracks):
>   1187   3853063      8639273      2.2     36.1                  if
> self.tracks_tLast[tracki] == t-1:
>   1188
>                   # track went on until t-1 (so far)
>   1189
>                   #    --  otherwise, skip "old" tracks
>   1190     62150       130277      2.1      0.5
>    pi_t_1 = track[-1] # index in last time section
> <snip>
> 
> (The object of the function is to connect closest points found in an
> image sequence into tracks connecting the points by shortest steps.)
> 
> Anyhow, my question is, is this just an artifact of line_profiler, or
> is the fact that those two lines are hit almost 4e6 times really
> resulting in more than 50% of the time being spent here !?
> (Calculating the actual Euclidean distance matrix over all point pairs
> takes supposedly only 15% of the time, for comparison).
> I tried to separate out the "enumerate(self.tracks)" into a separate
> line before the "for"-line, but the time spent was still unchanged on
> the "for".
> Does this mean "python is slow" here - and I should try cython (which
> i have never done so far ...) ?
> 
> Thanks,
> Sebastian Haase
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user

-- 
GMX DSL: Internet, Telefon und Entertainment für nur 19,99 EUR/mtl.!
http://portal.gmx.net/de/go/dsl02



More information about the SciPy-User mailing list