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

Sebastian Haase seb.haase at gmail.com
Tue Mar 16 04:40:14 EDT 2010


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



More information about the SciPy-User mailing list