How to make this faster

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri Jul 5 18:50:41 CEST 2013


On Fri, 05 Jul 2013 16:07:03 +0000, Helmut Jarausch wrote:

> The solution above take 0.79 seconds (mean of 100 calls) while the
> following version take 1.05 seconds (mean of 100 calls):

1) How are you timing the calls?

2) Don't use the mean, that's the wrong statistic when you are measuring 
something where the error is always one sided. You want the minimum, not 
the mean.

When you measure the time taken for a piece of code, the number you get 
is made up of two components:


1) the actual time the code would have taken, if there were no random 
fluctuations due to other processes, etc.; and

2) random errors due to switching to other processes, etc.

Both of these are unknown; you only know the total. But obviously the 
random errors are always positive. They can never be negative, and you 
can never measure a time which is less than the fastest your code could 
run.

(If your anti-virus software starts scanning in the middle of the trial, 
it can only make your code take more time to run, never less.)

So the only way to minimize the error is to pick the minimum time, not 
the average. The average just gives you:

  - some unknown "true" time, plus some unknown error, somewhere
    between the smallest error and the biggest error;

whereas the minimum gives you:

  - some unknown "true" time, plus the smallest error yet seen.




-- 
Steven




More information about the Python-list mailing list